導航:首頁 > 源碼編譯 > 模型的威力基於模型快速梳理源碼

模型的威力基於模型快速梳理源碼

發布時間:2023-02-06 10:55:22

① grpc-源碼-網路模型

golang 的grpc庫是 https://github.com/grpc/grpc-go

grpc server端和服務端網路協議是在tcp基礎上的 http2協議,http2協議負責grpc基礎的數據傳輸、連接管理、流控等, 具體的業務層service 定義是基於 protobuf的

整個的網路過程和關鍵點如下圖

說明:

TCP KeepAlive則是為了探測/保鮮(心跳檢測,連接錯誤檢測):用於探測對端的狀態及網路情況(有可能客戶端崩潰、強制關閉了應用、主機不可達等等),也有保鮮功能。比如如防止nat超時。TCP keepalive則是通過發送發送偵測包實現。在Linux中通過net.ipv4.tcp_keepalive_intvl,net.ipv4.tcp_keepalive_probes,net.ipv4.tcp_keepalive_time配置。比如gnet 網路框架中的實現 https://github.com/panjf2000/gnet/blob/master/netpoll/netpoll_unix.go

② 網路工程銅纜布線系統測試模型有哪幾種

網路工程中,銅纜布線系統測試可以通過不同的模型來完成。常見的測試模型包括基於二進制代碼測試(BBT)、基於模型測試(BMT)和基於黑箱測試(BBT)。

③ 軟體開發的一般流程是什麼_

1、概要設計

首先,開發者需要對軟體系統進行概要設計,即系統設計。概要設計需要對軟體系統的設計進行考慮,包括系統的基本處理流程、系統的組織結構、模塊劃分、功能分配、介面設計、運行設計、數據結構設計和出錯處理設計等,為軟體的詳細設計提供基礎。

2、詳細設計

在概要設計的基礎上,開發者需要進行軟體系統的詳細設計。在詳細設計中,描述實現具體模塊所涉及到的主要演算法、數據結構、類的層次結構及調用關系,需要說明軟體系統各個層次中的每一個程序(每個模塊或子程序)的設計考慮,以便進行編碼和測試。

3、編碼

在軟體編碼階段,開發者根據《軟體系統詳細設計報告》中對數據結構、演算法分析和模塊實現等方面的設計要求,開始具體的編寫程序工作,分別實現各模塊的功能,從而實現對目標系統的功能、性能、介面、界面等方面的要求。

4、測試

測試編寫好的系統。交給用戶使用,用戶使用後一個一個的確認每個功能。總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1年的外部測試都是正常的,因為永遠都會有不可預料的問題存在。

完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然日後少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟體的運營狀況並持續修補升級,直到這個軟體被徹底淘汰為止。

5、軟體交付

在軟體測試證明軟體達到要求後,軟體開發者應向用戶提交開發的目標安裝程序、資料庫的數據字典、《用戶安裝手冊》、《用戶使用指南》、需求報告、設計報告、測試報告等雙方合同約定的產物。

(3)模型的威力基於模型快速梳理源碼擴展閱讀:

開發平台:

軟體開發平台源於繁瑣的實踐開發過程中。開發人員在實踐中將常用的函數、類、抽象、介面等進行總結、封裝,成為了可以重復使用的「中間件」,而隨著「中間件」的成熟和通用,功能更強大、更能滿足企業級客戶需求的——軟體開發平台應運而生。

平台是一段時間內科研成果的匯聚,也是階段性平台期的標志,為行業進入新的研發領域提供了基礎。由於平台對企業核心競爭力的提升非常明顯,目前國內的管理軟體市場,軟體開發平台的應用已經成為一種趨勢。

由於開發環境、開發人員、功能定位、行業背景等的不同,不同品牌的平台存在較大差別。

④ N-Shot Learning:用最少的數據訓練最多的模型

作 者 | Heet Sankesara

翻 譯 | 天字一號(鄭州大學)、鄴調(江蘇 科技 大學)

審 校 | 唐里、Pita

如果將AI比作電力的話,那麼數據就是創造電力的煤。

不幸的是,正如我們看到可用煤是消耗品一樣,許多 AI 應用程序可供訪問的數據很少或根本就沒有數據。

新技術已經彌補了物質資源的不足;同樣需要新的技術來允許在數據很少時,保證程序的正常運行。這是正在成為一個非常受歡迎的領域,核心問題:N-shot Learning

1. N-Shot Learning

你可能會問,什麼是shot?好問題,shot只用一個樣本來訓練,在N-shot學習中,我們有N個訓練的樣本。術語「小樣本學習」中的「小」通常在0-5之間,也就是說,訓練一個沒有樣本的模型被稱為 zero-shot ,一個樣本就是 one-shot 學習,以此類推。

1-1 為什麼需要N-Shot?

我們在 ImageNet 中的分類錯誤率已經小於 4% 了,為什麼我們需要這個?

首先,ImageNet 的數據集包含了許多用於機器學習的示例,但在醫學影像、葯物發現和許多其他 AI 可能至關重要的領域中並不總是如此。典型的深度學習架構依賴於大量數據訓練才能獲得足夠可靠的結果。例如,ImageNet 需要對數百張熱狗圖像進行訓練,然後才能判斷一幅新圖像准確判斷是否為熱狗。一些數據集,就像7月4日慶祝活動後的冰箱缺乏熱狗一樣,是非常缺乏圖像的。

機器學習有許多案例數據是都非常稀缺,這就是N-Shot技術的用武之地。我們需要訓練一個包含數百萬甚至數十億個參數(全部隨機初始化)的深度學習模型,但可用於訓練的圖像不超過 5 個圖像。簡單地說,我們的模型必須使用非常有限的熱狗圖像進行訓練。

要處理像這個這樣復雜的問題,我們首先需要清楚N-Shot的定義。

對我來說,最有趣的子領域是Zero-shot learning,該領域的目標是不需要一張訓練圖像,就能夠對未知類別進行分類。

沒有任何數據可以利用的話怎麼進行訓練和學習呢?

想一下這種情況,你能對一個沒有見過的物體進行分類嗎?

夜空中的仙後座(圖源:https:// www .star-registration .com /constellation/cassiopeia)

是的,如果你對這個物體的外表、屬性和功能有充足的信息的話,你是可以實現的。想一想,當你還是一個孩子的時候,是怎麼理解這個世界的。在了解了火星的顏色和晚上的位置後,你可以在夜空中找到火星。或者你可以通過了解仙後座在天空中"基本上是一個畸形的'W'"這個信息中識別仙後座。

根據今年NLP的趨勢,Zero-shot learning 將變得更加有效(https://blog.floydhub .com /ten-trends-in-deep-learning-nlp/#9-zero-shot-learning-will-become-more-effective)。

計算機利用圖像的元數據執行相同的任務。元數據只不過是與圖像關聯的功能。以下是該領域的幾篇論文,這些論文取得了優異的成績。

在one-shot learning中,我們每個類別只有一個示例。現在的任務是使用一個影像進行訓練,最終完成將測試影像劃分為各個類。為了實現這一目標,目前已經出現了很多不同的架構,例如Siamese Neural Networks(https:// www .cs.cmu.e/~rsalakhu/papers/oneshot1.pdf),它帶來了重大進步,並達到了卓越的結果。然後緊接著是matching networks(https://ar xi v.org/pdf/1606.04080.pdf),這也幫助我們在這一領域實現了巨大的飛躍。

小樣本學習只是one-shot learning 的靈活應用。在小樣本學習中,我們有多個訓練示例(通常為兩到五個圖像,盡管上述one-shot learning中的大多數模型也可用於小樣本學習)。

在2019年計算機視覺和模式識別會議上,介紹了 Meta-Transfer Learning for Few-Shot Learning(https://ar xi v.org/pdf/ 181 2.02391v3.pdf)。這一模式為今後的研究開創了先例;它給出了最先進的結果,並為更復雜的元遷移學習方法鋪平了道路。

這些元學習和強化學習演算法中有許多都是與典型的深度學習演算法相結合,並產生了顯著的結果。原型網路是最流行的深度學習演算法之一,並經常用於小樣本學習 。

在本文中,我們將使用原型網路完成小樣本學習,並了解其工作原理。

2. 原型網路背後的思想

上圖為原型網路函數的示意圖。編碼器將圖像進行編碼映射到嵌入空間(黑圈)中的矢量中,支持圖像用於定義原型(星形)。利用原型和編碼查詢圖像之間的距離進行分類。圖源:https:// www .semanticscholar.org/paper/Gaussian-Prototypical-Networks-for-Few-Shot-on-Fort//figure/1

與典型的深度學習體系結構不同,原型網路不直接對圖像進行分類,而是通過在度量空間(https://en.wikipedia.org/wiki/Metric_space)中尋找圖像之間的映射關系。

對於任何需要復習數學的人來說,度量空間都涉及"距離"的概念。它沒有一個可區分的"起源"點。相反,在度量空間中,我們只計算一個點與另一個點的距離。因此,這里缺少了矢量空間中加法和標量乘法(因為與矢量不同,點僅表示坐標,添加兩個坐標或縮放坐標毫無意義!)請查看此鏈接,詳細了解矢量空間和度量空間之間的差異:https://math.stackexchange .com /questions/1 149 40/what-is-the-difference-between-metric-spaces-and-vector-spaces。

現在,我們已經學習了這一背景,我們可以開始了解原型網路是怎樣不直接對圖像進行分類,而是通過在度量空間中尋找圖像之間的映射關系。如上圖所示,同一類的圖像經過編碼器的映射之後,彼此之間的距離非常接近,而不同類的圖像之間具有較長的距離。這意味著,每當給出新示例時,網路只需檢查與新示例的圖像最近的集合,並將該示例圖像分到其相應的類。原型網路中將圖像映射到度量空間的基礎模型可以被稱為"Image2Vector"模型,這是一種基於卷積神經網路 (CNN) 的體系結構。

現在,對於那些對 CNN 不了解的人,您可以在此處閱讀更多內容:

簡單地說,他們的目標是訓練分類器。然後,該分類器可以對在訓練期間不可用的新類進行概括,並且只需要每個新類的少量示例。因此,訓練集包含一組類的圖像,而我們的測試集包含另一組類的圖像,這與前一組完全不相關。在該模型中,示例被隨機分為支持集和查詢集。

很少有鏡頭原型ck被計算為每個類的嵌入式支持示例的平均值。編碼器映射新圖像(x)並將其分類到最接近的類,如上圖中的c2(圖源:https://ar xi v.org/pdf/ 1703 .05 175 .pdf)。

在少鏡頭學習的情況下,訓練迭代被稱為一個片段。一個小插曲不過是我們訓練網路一次,計算損失並反向傳播錯誤的一個步驟。在每一集中,我們從訓練集中隨機選擇NC類。對於每一類,我們隨機抽取ns圖像。這些圖像屬於支持集,學習模型稱為ns-shot模型。另一個隨機采樣的nq圖像屬於查詢集。這里nc、ns和nq只是模型中的超參數,其中nc是每次迭代的類數,ns是每個類的支持示例數,nq是每個類的查詢示例數。

之後,我們通過「image2vector」模型從支持集圖像中檢索d維點。該模型利用圖像在度量空間中的對應點對圖像進行編碼。對於每個類,我們現在有多個點,但是我們需要將它們表示為每個類的一個點。因此,我們計算每個類的幾何中心,即點的平均值。之後,我們還需要對查詢圖像進行分類。

為此,我們首先需要將查詢集中的每個圖像編碼為一個點。然後,計算每個質心到每個查詢點的距離。最後,預測每個查詢圖像位於最靠近它的類中。一般來說,模型就是這樣工作的。

但現在的問題是,這個「image2vector」模型的架構是什麼?

論文匯總 Image2Vector 向量的結構

對於所有實際應用中,一般都會使用 4-5 CNN 模塊。如上圖所示,每個模塊由一個 CNN 層組成,然後是批處理規范化,然後是 ReLu 激活函數,最後通向最大池層。在所有模塊之後,剩餘的輸出將被展平並返回。這是本文中使用的網路結構(https://ar xi v.org/pdf/ 1703 .05 175 v2.pdf),您可以使用任何任何你喜歡的體系結構。有必要知道,雖然我們稱之為"Image2Vector"模型,但它實際上將圖像轉換為度量空間中的 64 維的點。要更好地了解差異,請查看 math stack exchange(https://math.stackexchange .com /questions/ 64 5672/what-is-the-difference-between-a-point-and-a-vector)。

負log概率的原理,圖源:https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/#nll

現在,已經知道了模型是如何工作的,您可能更想知道我們將如何計算損失函數。我們需要一個足夠強大的損失函數,以便我們的模型能夠快速高效地學習。原型網路使用log-softmax損失,這只不過是對 softmax 損失取了對數。當模型無法預測正確的類時,log-softmax 的效果會嚴重懲罰模型,而這正是我們需要的。要了解有關損失函數的更多情況,請訪問此處。這里是關於 softmax 和 log-softmax 的很好的討論。

Omniglot數據集中的部分示例(圖源:https://github .com /brendenlake/omniglot)

該網路在 Omniglot 數據集(https://github .com /brendenlake/omniglot)上進行了訓練。Omniglot 數據集是專門為開發更類似於人類學習的演算法而設計。它包含 50個不同的字母表,共計1623 個不同的手寫字元。為了增加類的數量,所有圖像分別旋轉 90、 180 和 270 度,每次旋轉後的圖像都當做一個新類。因此,類的總數達到 了 64 92(1,623 + 4)類別。我們將 4200 個類別的圖像作為訓練數據,其餘部分則用於測試。對於每個集合,我們根據 64 個隨機選擇的類中的每個示例對模型進行了訓練。我們訓練了模型 1 小時,獲得了約 88% 的准確率。官方文件聲稱,經過幾個小時的訓練和調整一些參數,准確率達到99.7%。

是時候親自動手實踐了!

您可以通過訪問以下鏈接輕松運行代碼:

代碼地址: https://github .com /Hsankesara/Prototypical-Networks

運行地址: https://floydhub .com /run?template=https://github .com /Hsankesara/Prototypical-Networks

讓我們深入學習一下代碼!(向左←滑動可查看完整代碼)

以上的代碼是 Image2Vector CNN結構的一個實現。它的輸入圖像的維度為28*28*3,返回特徵向量的長度為 64 。

上面的代碼片段是原型網中單個結構的實現。如果你有任何疑問,只需在評論中詢問或在這里創建一個問題,非常歡迎您的參與和評論。

網路概述。圖源:https://youtu.be/wcKL05DomBU

代碼的結構與解釋演算法的格式相同。我們為原型網路函數提供以下輸入:輸入圖像數據、輸入標簽、每次迭代的類數(即 Nc )、每個類的支持示例數(即 Ns )和每個類的查詢示例數(即 Nq )。函數返回 Queryx ,它是從每個查詢點到每個平均點的距離矩陣, Queryy 是包含與 Queryx 對應的標簽的向量。 Queryy 存儲 Queryx 的圖像實際所屬的類。在上面的圖像中,我們可以看到,使用3個類,即 Nc =3,並且對於每個類,總共有5個示例用於訓練,即 Ns =5。上面的s表示包含這15個( Ns * Nc )圖像的支持集, X 表示查詢集。注意,支持集和查詢集都通過 f ,它只不過是我們的「image2vector」函數。它在度量空間中映射所有圖像。讓我們一步一步地把整個過程分解。

首先,我們從輸入數據中隨機選擇 Nc 類。對於每個類,我們使用random_sample_cls函數從圖像中隨機選擇一個支持集和一個查詢集。在上圖中,s是支持集,x是查詢集。現在我們選擇了類( C1 、C2 和 C3 ),我們通過「image2vector」模型傳遞所有支持集示例,並使用get_centroid函數計算每個類的質心。在附近的圖像中也可以觀察到這一點。每個質心代表一個類,將用於對查詢進行分類。

網路中的質心計算。圖源:https://youtu.be/wcKL05DomBU

在計算每個類的質心之後,我們現在必須預測其中一個類的查詢圖像。為此,我們需要與每個查詢對應的實際標簽,這些標簽是使用get_query_y函數獲得的。 Queryy 是分類數據,該函數將該分類文本數據轉換為一個熱向量,該熱向量在列點對應的圖像實際所屬的行標簽中僅為「1」,在列中為「0」。

之後,我們需要對應於每個 Queryx 圖像的點來對其進行分類。我們使用「image2vector」模型得到這些點,現在我們需要對它們進行分類。為此,我們計算 Queryx 中每個點到每個類中心的距離。這給出了一個矩陣,其中索引 ij 表示與第 i 個查詢圖像對應的點到第 j 類中心的距離。我們使用get_query_x函數構造矩陣並將矩陣保存在 Queryx 變數中。在附近的圖像中也可以看到同樣的情況。對於查詢集中的每個示例,將計算它與 C1、C2 和 C3 之間的距離。在這種情況下, X 最接近 C2 ,因此我們可以說 X 被預測屬於 C2 類。

編程方式,我們可以使用一個簡單的ARMmin函數來做同樣的事情,即找出圖像被預測的類。然後使用預測類和實際類計算損失並反向傳播錯誤。

如果你想使用經過訓練的模型,或者只需要重新訓練自己,這里是我的實現。您可以使用它作為API,並使用幾行代碼來訓練模型。你可以在這里找到這個網路。

3. 資源列表

這里有些資源可以幫你更全面的了解本文內容:

4. 局限性

盡管原型網路的結果不錯,但它們仍然有局限性。首先是缺乏泛化,它在Omniglot數據集上表現很好,因為其中的所有圖像都是一個字元的圖像,因此共享一些相似的特徵。然而,如果我們試圖用這個模型來分類不同品種的貓,它不會給我們准確的結果。貓和字元圖像幾乎沒有共同的特徵,可以用來將圖像映射到相應度量空間的共同特徵的數量可以忽略不計。

原型網路的另一個限制是只使用均值來確定中心,而忽略了支持集中的方差,這在圖像有雜訊的情況下阻礙了模型的分類能力。利用高斯原網路(https://ar xi v.org/abs/ 1708 .02 73 5)類中的方差,利用高斯公式對嵌入點進行建模,克服了這一局限性。

5. 結論

小概率學習是近年來研究的熱點之一。有許多使用原型網路的新方法,比如這種元學習方法,效果很好。研究人員也在 探索 強化學習,這也有很大的潛力。這個模型最好的地方在於它簡單易懂,並且能給出令人難以置信的結果。

via https://blog.floydhub .com /n-shot-learning/

本文由雷鋒字幕組成員翻譯,雷鋒字幕組是由AI愛好者組成的字幕翻譯團隊;團隊成員有大數據專家、演算法工程師、圖像處理工程師、產品經理、產品運營、IT咨詢人、在校師生;志願者們來自IBM、AVL、Adobe、阿里、網路等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。了解字幕組 請加 微信 ~

⑤ 如果想優化ai模型部署,哪些源碼值得一讀

想優化ai模型部署,以下3個源碼值得一讀。
1、普通應用程序或網路應用場景中的源碼值得一讀。
2、Paddle模型源碼。
3、AI模型的快速端雲部署源碼。

⑥ 基於模型測試01

一、概述

    MBT中文名稱為基於模型的測試,基於模型的測試屬於軟體測試領域的一種測試方法。

二、背景

      軟體測試是一款軟體產品質量的最後一道防線,是產品線上前必不可少的、最重要的一環。每一款高質量的軟體產品背後,都蘊含了大量的測試工作。而且測試工作很可能是軟體開發過程中最昂貴、勞動最密集的工作。在設計測試用例的過程中,或多或少的存在著問題,使得軟體測試結果不那麼理想。下面引入新的測試方法,基本模型的測試,是自動化測試的一個分支,它將測試用例的設計依託於被測系統的模型,並基於該模型自動生成測試用例的技術。從質量保證的角度來看,我們可以制定測試的內容,但是無法保證測試會覆蓋所有可能的組合,而MBT則允許軟體開發和測試人員,只關注建立系統的正確性及模型的規范性,再通過專門的MBT工具根據不同的測試用例設計策略從系統模型生成可靠的測試用例。

    與傳統測試相比,優點:

         (1)測試用例的維護更輕松:維護好模型,無需關注測試用例的細節

         (2)軟體缺陷發現的更早:在構建被測系統模型的過程中,需要對被測系統有比較全面的理解,那麼在早期建模過程中就可以發現被測系統中的一些問題,不需要等到執行大量用例時才發現;

         (3)測試自動化的水平更高:建模後,MBT可以自動生成測試用例,不需要人工編寫測試文檔;

         (4)測試覆蓋率變得更高,使得徹底的測試(即:窮盡測試)成為可能:傳統測試設計的過程中依賴人工,MBT生成測試路徑時會避免人工設計測試用例時的思維局限性,生成更豐富的測試路徑用例,但是是否需要執行「徹底」的測試由漏測對業務的影響決定。MBT只是從技術上提供了窮盡測試可能性。

         (5)基於模型間接維護測試用例的方式更高效:傳統維護時需要依賴人工,需要耗費大量的人力和時間成本,重新測試設計。使用MBT只需要維護好測試模型即可,生成測試用例的工作可以由MBT工具自動完成;

     缺點,即未廣泛推廣的原因:

         (1)學習成本較高:要求開發人員、測試人員都精通建模,和工具的選型;

         (2)使用MBT的初期投資較大:已有的MBT工具不一定適合自己產品,定製的話需要考慮擴展性,和處理復雜邏輯,也就是要花費大量時間和精力;

         (3)用例爆炸

   總結下,測試方法多種多樣,MBT和傳統測試相比,各有優劣。如果一個應用的任何組件都可以通過模型來模擬、通過驅動程序來驅動,並可以通過測試結果來比較的話,那麼這個應用是MBT的最佳候選者。

   2.1  通用流程

 2.2  Model design (模型設計)

  模型設計,目的是用來為構造測試用例而進行的被測系統描述

(1)模型關注點:

     (2) MBT模型分類:

2.3  Tests selection ( 測試需求選擇)

             指導測試用例生成器( test generation)如何生成用例

2.4   Tests  paths generation(測試用例生成)

           按模型及測試需求選擇來生成測試用例。GraphWalker就是完成這部分工作的一個開源的java工具。

2.5   Tests execution(執行測試)

           執行測試,並比較預期

2.6  FSM舉例:海拍客mallpc 登錄相關功能建模,如下

一個箭頭,代表一次測試動作;

一個節點,代表一次測試驗證;

2.7 常見工具 :BPM-X、fMBT、GraphWalker

三 、GraphWalker簡介

 

 GraphWalker就是一個基於測試模型的用例生成工具,主要支持於FSM, EFSM模型。它以有向圖的形式讀取模型,生成測試路徑,適合於多狀態以及基於事件驅動的狀態轉換的系統。

四、使用GraphWalker建模

有向圖中,頂點(或節點)表示一些期望的狀態,並且邊(弧,箭頭,過渡)表示為了實現期望的狀態需要做的任何動作;

 4.1 建模工具:yEd

4.2 建模規則1

      4.3 建模規則2

    4.4 建模keywords

4.5 支持多模型:

     GraphWalker可以在一個會話中使用幾個模型。這意味著在生成路徑時,GraphWalker可以選擇跳出一個模型到另一個模型。當將不同的功能分為多個模型時,這是非常方便的。

     

多模型offilne運行舉例:

java -jar graphwalker-cli-4.0.0-SNAPSHOT.jar -d all offline -m Model_A.graphml random(edge_coverage(100)) -m Model_B.graphml random(edge_coverage(100)) -m Model_C.graphml random(edge_coverage(100)) -m Model_D.graphml random(edge_coverage(100)) –o

當路徑生成到達模型A中的頂點v_B時,它必須考慮關鍵字SHARED:B ..這將告訴GraphWalker使用相同的名稱搜索所有其他模型的同一個關鍵字:B.在我們的例子中,只有一個,它在模型B中。

現在GraphWalker決定是跳出模型A,進入模型B中的頂點v_B,還是留在模型A中。這個決定是基於隨機的。

多模型特性:

五、路徑生成器和結束條件

六、GraphWalker工作方式

以作為第三方庫為例: 使用GraphWalker第三方庫實現模型自動化測試

七、GraphWalker命令行:此處省略

八、Restful或WebSocket服務的區別:此處省略

九、Web Socket API介面:此處省略

十、REST API介面:此處省略

十一、GraphWalker源碼:

GraphWalker工具核心:graphwalker-core

參考資料:官網 http://graphwalker.github.io/

備註:

FSM :有限狀態機 Finite State Machine

EFSM:擴展有限狀態機

⑦ SUMO 中的車輛動力學模型

SUMO 中車輛動力學模型包括兩方面

longitudinal model : 縱向動力學模型,描述車輛加速和減速

lateral model :橫向動力學模型,描述車輛換道

在 longitudinal model 方面,由於 SUMO 主要用於研究車輛的外部行為、多車交互和交通流,對於單個車輛建模精度要求不高,可以近似看作質點,採用比較簡單的 car-following model (跟車模型) 來描述車輛速度和位置變化規律。car-following model 中包含兩種情況:無前車和有前車。

在 lateral model 方面,SUMO 採用 lane changing model ( 參考文獻 )。簡單地說就是以決策樹的方式設定諸多換道條件,只要滿足某些條件,就進行相應的換道操作。
默認的 lane changing model 是瞬間換道,即在一個 simulation step 中完成換道,直觀地看就是車輛在兩個車道之間瞬移。
更加精細的模型包括:

具體設置可以參考 https://sumo.dlr.de/wiki/Simulation/SublaneModel#Sublane-Model

本文主要介紹 car-following model.

要了解 SUMO 中默認使用的改進 Krauss model,需要先了解一下原始的 Krauss model 的建模思想。

Krauss model 來自文獻:

假設 為 leader 與 follower 車間距,其中 ​ 為車身長度。

如果要求車輛不相撞,需要滿足

其中

為了計算 ​ , 需要給出速度與剎車距離的函數表達式 ​和 。下邊用 ​ 函數在 ​ 處的 Taylor 展開近似替代 ​ 函數,忽略高階項得到

下邊的問題就是如何計算導數 ​ .

假設剎車時加速度為 ​,則有

其中的積分項對應了剎車加速度為 情況下的剎車距離。

一般我們在計算距離時習慣將積分區間設定為時間,而被積函數為速度。這里是將積分區間設定為速度的變化區間,對時間進行積分。這樣積分之後得到關於速度的函數,以便後續的操作。

將 式帶入 式中得

上述表達式右邊 ​ 含有​ ,所以需要再整理一下,得到 ​ 的顯式表達為

其中原本的 ​ 也替換為了最大剎車加速度 ​.

上述式子就是 SUMO 中 original Krauss model 的安全跟車速度表達式,部分 程序源碼 如下:

這里 式右邊就是安全跟車速度,記做 ​ 。但是,這一速度還不是最終車輛採用的跟車速度。與無前車情況類似,我們也要保證跟車速度不能超過允許的最大速度,因此要取安全速度和允許最大速度中的較小值,即

其中 ​ 為最大加速度, ​ 為模擬更新步長。

另外,可以引入隨機因子,表示車輛並不一定按照上述安全跟車速度行駛,可以取更小的值,即

其中 ​ 為外部設定的 imperfection parameter,表徵了偏離 ​ 的程度。

總結演算法步驟:

盡管 SUMO 中包含了上述原始 Krauss model,但是沒有作為默認 car-following model,而是做了較大改動。改進模型與原始的 Krauss 模型的出發點是相同的:在保證不碰撞的前提下,車速盡量的快。但在計算安全速度方面,與原始 Krauss 完全不同。

改進的 Krauss model 依然基於上述公式 ,但並沒有採用泰勒展開方式近似表達剎車距離函數 ,而是直接數值計算。步驟與源碼實現如下:

上式中 為前車速度減到 0 需要的時間。

在 SUMO 源碼中通過 brakeGapEuler 函數 實現上述計算過程。

這里需要注意的是,SUMO 默認採用 Euler 數值積分方式 ,在計算位置時公式如下:

即 時刻的位置等於 時刻的位置加上 時刻的速度造成的位置變化。

明白了這種積分方式才能更好的理解源碼中的計算公式。

得到安全跟車速度之後,其餘部分與原始的 Krauss model 類似的,要與允許的最大速度比較,並且考慮隨機因素。具體在 followSpeed 函數 和 dawdle2 函數 中實現。

⑧ 國內低代碼平台哪家強

隨著「低代碼」成為如今市場上的熱詞,打著「低代碼」平台的相關產品越來越多。

然而點進去一看很多產品其實並不是真正實際上的低代碼,有的是零代碼,有的還得依靠專業開發語言才能開發,對於很多企業而言這技術門檻就相對較高。

那麼問題來了,究竟國內低代碼平台哪一家才是最正宗的呢?

建議參考一下百數低代碼開發平台

一、什麼是低代碼開發平台?

「低代碼開發平台」是一款快速搭建系統的平台,在平台上客戶可以通過少量代碼快速構建自己企業所需的OA系統、采購系統、倉儲系統等等,適用於任何的辦公場景與業務場景。

二、低代碼開發平台擁有哪些優勢

1、擁有零代碼平台的所有功能。

2、這款低代碼開發平台採用的是Python腳本的開發語言,對於企業而言降低了開發門檻。只要稍微懂點Python語言的就能自主在平台上進行開發相關的系統和應用。

3、降低了企業在系統這一塊的開發成本。以往很多企業在系統這一塊都是找第三方外包商進行定製,因此在時間還是金錢花銷都是非常大的。而通過低代碼進行搭建,一方面可以省掉不少的人工費,另一方面開發系統的時間也比傳統開發的時間要縮短到三分之一,提高了企業的效率。

4、加快了系統的更新迭代速度。

隨著企業發展,變化肯定是不可避免的,那麼百數低代碼平台擁有著最完善的二次開發體系,在功能擴展性能完全滿足企業的業務發展的需要,不需要再另外藉助其他系統。除此之外,百數的低代碼平台還支持個性化計算與管理。至於平台的更新時間也不需要跟著官方走,掌握權在自己手裡。

三、百數低代碼平台對企業的價值

  1. 經濟方面:降低了成本

  2. 操作方面:托拉拽式搭建,簡單方便

  3. 使用方面:友好、更加人性化

  4. 管理方面:高效率

  5. 開放方面:降低了難度,節省時間

四、低代碼平台發展前景

隨著釘釘在發布會把「低代碼」這個詞著重提出來,這個詞的熱度在未來一段時間毫無疑問是相當高的,低代碼相關的產品肯定也會層出不窮。百數低代碼平台作為在行業內奮斗幾年的產品,接下來依舊會更加努力,持續優化功能,用最簡單的方式為廣大政企賦能,繼續降低成本、提高質量。

相信未來有很多企業與個人創業者都會用低代碼平台實現辦公管理與業務管理,只需動動手就能實現系統搭建的方法,簡直不要太簡單啊!

⑨ 軟體過程模型的過程模型

它有時也稱為傳統生存周期模型或瀑布模型。它提出了軟體開發的系統化的、順序的方法。其流程從系統開始,隨後是需求分析、設計、編碼、測試、支持。這種模型是最早也是應用最廣泛的軟體過程模型(雖然這種模型會引起「堵賽狀態」)。
缺點:
1、實際的項目大部分情況難以按照該模型給出的順序進行,而且這種模型的迭代是間接的,這很容易由微小的變化而造成大的混亂。
2、 經常情況下客戶難以表達真正的需求,而這種模型卻要求如此,這種模型是不歡迎具有二義性問題存在的。
3、 客戶要等到開發周期的晚期才能看到程序運行的測試版本,而在這時發現大的錯誤時,可能引起客戶的驚慌,而後果也可能是災難性的。
4、採用這種線性模型,會經常在過程的開始和結束時碰到等待其他成員完成其所依賴的任務才能進行下去,有可能花在等待的時間比開發的時間要長。我們稱之為「堵賽狀態」。
優點:
1、它提供了一個模板,這個模板使得分析、設計、編碼、測試和支持的方法可以在該摸板下有一個共同的指導。
2、雖然有不少缺陷但比在軟體開發中隨意的狀態要好得多。 從需求收集開始,開發者和客戶在一起定義軟體的總體目標,標識已知的需求並且規劃出需要進一步定義的區域。然後是「快速設計」,它集中於軟體中那些對客戶可見的部分的表示,這將導致原型的創建,並由客戶評估並進一步精化待開發軟體的需求。逐步調整原型使其滿足客戶的需求,這個過程是迭代的。其流程從聽取客戶意見開始、隨後是建造/修改原型、客戶測試運行原型、然後回頭往復循環直到客戶對原型滿意為止。由於這種模型可以讓客戶快速的感受到實際的系統(雖然這個系統不帶有任何質量的保證),所以客戶和開發者都比較喜歡這種過程模型(對於那些僅僅用來演示軟體功能的公司而言或從來不考慮軟體質量和不害怕長期維護的公司而言)。
缺點:
1、沒有考慮軟體的整體質量和長期的可維護性。
2、大部分情況是不合適的操作演算法被採用目的為了演示功能,不合適的開發工具被採用僅僅為了它的方便,還有不合適的操作系統被選擇等等。
3、由於達不到質量要求產品可能被拋棄,而採用新的模型重新設計。
優點:
1、如果客戶和開發者達成一致協議:原型被建造僅為了定義需求,之後就被拋棄或者部分拋棄, 那麼這種模型很合適了。
2、迷惑客戶搶占市場,這是一個首選的模型。 這是一個增量型的軟體開發過程模型,強調極短的開發周期,它是線性模型的一個「高速」變種,通過使用構件的建造方法贏得了快速開發。如果需求理解的好而且約束了項目的范圍,利用這種模型可以很快的創建出功能完善的「信息系統」。其流程從業務建模開始,隨後是數據建模、過程建模、應用生成、測試及反復。RAD過程強調的是復用,復用已有的或開發可復用的構件。實際上RAD採用第四代技術。
缺點:
1、只能用於信息系統。
2、對於較大的項目需要足夠的人力資源去建造足夠的RAD組。
3、開發者和客戶必須在很短的時間完成一系列的需求分析, 任何一方配合不當都會導致RAD項目失敗。
4、這種模型對模塊化要求比較高,如果有哪一功能不能被模塊化,那麼建造RAD所需要的構件就會有問題。
5、技術風險很高的情況下不適合這種模型。
優點:
1、開發速度快,質量有保證。
2、對信息系統特別有效。 這種模型融合了線性順序模型的基本成份和原型實現模型的迭代特徵。增量模型採用隨著日程時間的進展而交錯的線性序列。每一個線性序列產生軟體的一個可發布的「增量」。當使用增量模型時,第一個增量往往是核心的產品,也就是說第一個增量實現了基本的需求,但很多補充的特徵還沒有發布。客戶對每一個增量的使用和評估,都做為下一個增量發布的新特徵和功能。這個過程在每一個增量發布後不斷從復,直到產生了最終的完善產品。增量模型強調每一個增量均發布一個可操作的產品。
缺點:
1、至始至終開發者和客戶糾纏在一起,直到完全版本出來。
優點:
1、人員分配靈活,剛開始不用投入大量人力資源,當核心產品很受歡迎時,可增加人力實現下一個增量。
2、當配備的人員不能在設定的期限內完成產品時,它提供了一種先推出核心產品的途徑,這樣就可以先發布部分功能給客戶,對客戶起到鎮靜劑的作用。
3、具有一定的市場。 這是一個演化軟體過程模型,它將原型實現的迭代特徵和線性順序模型中控制的和系統化的方面結合起來。使得軟體的增量版本的快速開發成為可能。在螺旋模型中,軟體開發是一系列的增量發布。在每一個迭代中,被開發系統的更加完善的版本逐步產生。螺旋模型被劃分為若干框架活動,也稱為任務區域。典型地,有3到6個任務區域:
1、客戶交流:建立開發者和客戶之間有效通信所需要的任務。
2、計劃:定義資源、進度、及其它相關項目信息所需要的任務。
3、風險分析:評估技術的及管理的風險所需要的任務。
4、工程:建立應用的一個或多個表示說需要的任務。
5、構造及發布:構造、測試、安裝和提供用戶支持所需要的任務。
6、客戶評估:基於對在工程階段產生的或在安裝階段實現的軟體表示的評估,獲得客戶反饋所需要的任務。
這是一個相對較新的模型,它的功效還需要經歷若干年的使用方能確定下來。
缺點:
1、需要相當的風險分析評估的專門技術,且成功依賴於這種技術。
2、很明顯一個大的沒有被發現的風險問題,將會導致問題的發生,可能導致演化的方法失去控制。
3、這種模型相對比較新,應用不廣泛,其功效需要進一步的驗證。
優點:
1、對於大型系統及軟體的開發,這種模型是一個很好的方法。開發者和客戶能夠較好地對待和理解每一個演化級別上的風險。 螺旋模型提出了強調客戶交流的一個框架活動。該活動的目標是從客戶處誘導項目需求。在理想情況下,開發者簡單地詢問客戶需要什麼,而客戶提供足夠的細節進行下去。不幸的是這種情形很少發生。在現實中,客戶和開發者進入一個談判過程,客戶被要求在成本和應市之間的約束下平衡功能、性能、和其它產品或系統特徵。最好的談判追求「雙贏」結果,也就是說通過談判客戶獲得大部份系統的功能,而開發者則獲得現實的和可達到的預算和時限。對客戶的交流定義了下面的活動:
1、系統或子系統的關鍵「風險承擔者」的標識。
2、風險承擔者的「贏條件」的確定。
3、風險承擔者的贏條件談判,以將它們協調為一組滿足各方考慮的雙贏條件。
缺點:
1、需要額外的談判技巧。
優點:
1、客戶和開發者達到一種平衡。 這種模型關注於多個任務的並發執行,表示為一系列的主要技術活動、任務及它們的相關狀態。並發過程模型是由客戶要求、管理決策、評審結果驅動的。該模型不是將軟體工程活動限定為一個順序的事件序列,而是定義了一個活動網路。網路上的每一個活動均可於其它活動同時發生。這種模型可以提供一個項目的當前狀態的准確視圖。
缺點:暫時無
優點:
1、可用於所有類型的軟體開發,而對於客戶/伺服器結構更加有效。
2、可以隨時查閱到開發的狀態。 面向對象的技術為軟體工程的基於構件的過程模型提供了技術框架。面向對象模型強調了類的創建、類的封裝了的數據、操縱該數據的演算法。一般來講經過合適的設計和實現,面向對象的類可以在不同的應用及基於計算機的系統的體系結構中復用。基於構件的開發模型融合了螺旋模型的許多特徵,它本質上是演化形的,要求軟體創建的迭代方法。然而基於構件的開發模型是利用預先包裝好的軟體構件(有時成為類)來構造應用。
開發活動從候選類的標識開始,這一步是通過檢查將被應用系統操縱的數據及用於實現該操縱的演算法來完成的。相關的數據和演算法被封裝成一個類。
缺點:
1、過分依賴於構件,構件庫的質量影響著產品質量。
優點:
1、構件可復用。提高了開發效率。
2、採用了面向對象的技術。 形式化方法模型包含了一組活動,他們導致了計算機軟體的數學規約。形式化方法使得軟體工程師們能夠通過應用一個嚴格的數學符號體系來規約、開發、和驗證基於計算機的系統。 這種方法的一個變種,稱為凈室軟體工程,已經被一些組織所採用。在開發中使用形式化方法時,它們提供了一種機制,能夠消除使用其它軟體過程模型難以克服的很多問題。二義性、不完整性、不一致性能被更容易地發現和糾正,而不是通過專門的評審,是通過對應用的數學分析。 形式化方法提供了可以產生無缺陷軟體的承諾。
缺點:
1、開發費用昂貴(對開發人員需要多方面的培訓),而且需要的時間較長。
2、不能將這種模型作為對客戶通信的機制,因為客戶對這些數學語言一無所知。
3、還不流行。
優點:
1、形式化規約可直接作為程序驗證的基礎,可以盡早的發現和糾正錯誤(包括那些其它情況下不能發現的錯誤)。
2、開發出來的軟體具有很高的安全性和健壯性,特別適合安全部門或者軟體錯誤會造成經濟損失的開發者。
3、具有開發無缺陷軟體的承諾。 一系列的軟體工具的使用,是第四代技術的特點。這些工具有一個共同的特點:能夠使軟體工程師們在較高級別上規約軟體的某些特徵,然後根據開發者的規約自動生成源代碼。我們知道,軟體在越高的級別上被規約,就越能被快速的建造出程序。軟體工程的
4GT模型集中於規約軟體的能力:使用特殊的語言形式或一種採用客戶可以理解的術語描述待解決問題的圖形符號體系。和其它模型一樣,4GT也是從需求收集這一步開始的,要將一個4GT實現變成最終產品,開發者還必須進行徹底的測試、開發有意義的文檔,並且同樣要完成其它模型中同樣要求的所有集成活動。總而言之,4GT已經成為軟體工程的一個重要方法。特別是和基於構件的開發模型結合起來時,4GT模型可能成為當前軟體開發的主流模型!
缺點:
1、用工具生成的源代碼可能是「低效」的。
2、生成的大型軟體的可維護性還令人懷疑。
3、在某些情況下可能需要更多的時間。
優點:
1、縮短了軟體開發時間,提高了建造軟體的效率。
2、對很多不同的應用領域提供了一種可行性途徑和解決方案

閱讀全文

與模型的威力基於模型快速梳理源碼相關的資料

熱點內容
電腦如何實現跨網段訪問伺服器 瀏覽:549
模塊化網頁源碼位元組跳動 瀏覽:485
梯度下降演算法中遇到的問題 瀏覽:605
伺服器連接電視怎麼接 瀏覽:323
phploop語句 瀏覽:500
交叉編譯工具鏈里的庫在哪 瀏覽:781
安卓手q換號怎麼改綁 瀏覽:399
nba球星加密貨幣 瀏覽:789
命令看網速 瀏覽:124
java堆分配 瀏覽:161
linuxbuiltin 瀏覽:560
cstpdf 瀏覽:941
texstudio編譯在哪 瀏覽:352
國家反詐中心app注冊登記表怎麼注冊 瀏覽:972
加密機默認埠 瀏覽:101
有哪個網站有免費的python源代碼 瀏覽:304
蘋果手機如何導入安卓電話 瀏覽:915
奧利奧雙重解壓 瀏覽:388
安卓賬號怎麼在蘋果手機上玩 瀏覽:798
畫畫用什麼安卓ipad好 瀏覽:693