佈署 IoT Edge 和霧運算技術以開發智慧建築服務
2021年2月19日 星期五
《3S MARKET》這篇報導把物聯網的架構與實作,描寫的非常詳細,雖然在建築的細節上描述不多,但報導中也提及這是個實際驗證,可適用在很多的場域。不知道,有多少人真正看得懂?當然,連這篇都看不懂的人,就別說他真正了解物聯網、Edge 與 Cloud。
事實上這篇報導的描述不難了解,真正物聯網與邊緣運算的挑戰,是在實作。實作真正面臨的,是這些數據處理、融合、分析上的完整度,還有 —— 找到實作的場景!
摘要
基於 SoC 架構的嵌入式系統的進步,使許多商業設備的開發變得足夠強大,足以運行操作系統和複雜的算法。這些設備整合了一組具有連通性、運算能力和成本降低的不同感測器。在這種情況下,物聯網(IoT)的潛力不斷增加,並帶來了其他發展可能性:「事物」現在可以增加數據源附近的運算量;因此,可以在本地系統上,佈署不同的物聯網服務。
這種範例稱為「邊緣運算」,它整合了物聯網技術和雲端運算系統。邊緣運算可以減少感測器與中央數據中心之間,所需的通信頻寬。此方法需要管理感測器、執行器、嵌入式設備,和可能不連續連接到網路的其他資源(例如智慧手機)。這種趨勢對於智慧建築設計非常有吸引力,在智慧建築設計中,必須整合不同的子系統(能源、氣候控制、安全性、舒適性、使用者服務、維護和營運成本)以開發智慧設施。在這項工作中,分析和提出了一種基於邊緣運算範例的智慧服務設計方法。
這種新穎的方法,克服了現有設計中與服務的互操作性,和可伸縮性有關的一些缺點。描述了基於嵌入式設備的實驗架構。能源管理、安全系統、氣候控制和資訊服務,是實施新智慧設施的子系統。
1. 簡介
建築自動化系統使用開放式通信標準和介面,可以整合多種不同的建築控制規則,例如供暖、通風、空調、照明和百葉窗、安全功能和設備。但是,現有建築物通常不具有這些系統。
通常,每種安裝類型都提供特定的服務:供暖通風和空調(HVAC)控制氣候服務,攝影機和感測器提供安全服務等。僅當設計能源管理系統時,不同的子系統相關,但僅透過以下方式,連接建築物的能源管理系統。能源管理服務,集中在專用軟體中。
對於使用者和維護技術人員來說,提供不同服務的不同製造商,發現很難整合新的服務和功能。自動化建築將用於控制和數據採集的軟體,與工業協議和介面整合在一起。此外,將新服務整合到這種解決方案中並不容易,這取決於已安裝軟體的開發。
這些工業發展還為能源管理,提供了雲端連接解決方案和智慧服務。這些服務,也在集中式電腦系統中開發。數據被傳輸到這些系統或雲端進行分析。本文提出使用佈署在物聯網(IoT)技術中的邊緣和霧運算範例,主要有兩個目的:
A. 在自動化和非自動化建築物中,促進新的智慧和可互操作服務的整合(整合)。
B. 允許在建築物的所有子系統之間,分配智慧服務(互操作性)。
透過該建議,可以促進建築物子系統之間的關係。它還促進創建新的智慧服務(例如,新的分佈式智慧控制算法;使用電源管理捕獲的數據,來檢測人類活動;捕獲設備連接的模式辨識,運算可再生電力預測,在安全服務中使用電力數據等)。在這項工作中,我們設計了一個中間軟體的體系結構,該體系結構具有兩個主要層,這些層基於嵌入式設備、IoT 通信協議和硬體支援,來開發人工智慧算法(圖1)。
為了實現這一目標,我們在建築物的設施中添加了兩個概念等級:邊緣節點和霧節點。每個等級都有不同種類的設備和功能。我們佈署並實現了基於層的中間軟體的體系結構,以對模式進行實驗。
本文的組織結構如下:第 2 節回顧了智慧建築技術,建築物中的 IoT 佈署以及邊緣運算範例。第 3 節提出了一種在建築物(自動與否)中佈署邊緣和霧運算範例的方法。第 4 節介紹了進行的實驗。最後,第 5 節介紹了結論和未來的工作。
2. 相關工作
本節介紹與這項工作相關的主要研究領域。首先,我們在分析雲端運算層之後,回顧了基於邊緣運算範例的資源和服務供應。最後,我們研究了實現智慧建築的技術,並在最後的小節中,總結了先前研究的貢獻。
2.1. 邊緣運算資源和服務供應
最近,網路在兩端被標記為「邊緣」和「核心」,以查明處理發生的位置。邊緣端靠近數據源和使用者,核心端由雲端伺服器組成。透過這種方式,邊緣運算範例將運算推送到 IoT 網路的邊緣,以減少數據處理延遲,和發送到雲端的數據數量。基於雲端的後端,可以處理對時間不太敏感,或源設備本身不需要結果的處理請求(例如,物聯網網路狀態下的大數據分析)。
在邊緣運算資源供應方面,正在進行的 Horizon 2020 RECAP 項目,提出了一種整合的雲端 - 邊緣 - 霧端架構,目的在解決應用放置、基礎架構管理和容量供應。雲端/邊緣基礎架構監控功能豐富了應用,基礎架構和工作負載模型,這些模型又被回饋到優化系統中,該系統可以協調應用並持續配置基礎架構。
徐等人進行的研究。 提出了一種用於邊緣運算的實用感知資源分配方法,稱為 Zenith。借助 Zenith,服務提供商可以與邊緣基礎設施提供商,建立資源共享合同,從而允許延遲感知資源調配算法,以滿足其延遲需求的方式,來調度邊緣任務。
邊緣節點資源管理(簡稱 ENORM),是管理邊緣/霧節點資源的框架,可透過監控應用需求,來自動擴展邊緣節點。可以透過靜態優先等級分配,來確定特定應用的優先等級。供應和自動縮放機制,是基於線性搜索的相對簡單的實現。
當源本身是可行動的時,邊緣雲範例也是可行的。 Chen 等人研究了行動設備向邊緣節點(特別是在無線電接入網路邊緣)的智慧運算分流。在這項工作中,作者提供了任務卸載算法,將分佈式運算卸載決策表述,為多使用者運算卸載功能。在同一項工作中,Wang 等人研究了聯合協調卸載任務,到多個邊緣節點的問題,並提出在邊緣等級引入及准入控制,以及兩階段調度方法,與傳統的最近邊緣選擇方法相比,改進了卸載性能。
2.2. 雲端運算服務配置
就社會和行業採用資訊技術而言,雲端運算範例是最具創新性的策略之一。提供的優勢提高了效率,並降低了成本,同時提供了可透過 Internet,普遍存取訪問的按需 IT 資源和服務。
當前,雲端運算服務種類繁多,甚至如何提供,這是一個受到廣泛研究的主題,正在提出許多的方案。甚至有評論總結了雲端運算範例的相關研究。
本小節介紹了有關以下問題的先前工作,這些問題與本手稿的主題有關:(i)安全性; (ii)服務品質(QoS); (iii)提供邊緣服務。
(i)安全是雲端運算中一個具有挑戰性的問題。雲端服務位於應用環境之外,並且超出了防火牆的保護範圍,因此,需要附加的安全層。另外,邊緣和霧運算應用的行動性和異構性,使得難以定義單個過程。因此,需要一種分佈式安全策略。
此外,必須有一個標準化的環境,才能正確解決此問題,並指定霧運算和邊緣設備,如何相互協作。網路邊緣上的多個霧節點之間的敏感數據通信,需要資源受限的事物的輕量級解決方案。另一個與安全性相關的問題是數據位置。在雲端中運行數據分析是很常見的。因此,關於數據安全或隱私的公有雲與私有雲的爭論就出現了。
(ii)分配給雲端應用的資源,通常是根據合同規定的服務水準協議(SLA)所設置的。但是,實際上,由於偶爾執行大量事務,而導致分配的基礎結構飽和,可能會出現瓶頸。為了解決此問題,可以在資源可用時,動態擴展雲端基礎架構。當前,最具創新性的趨勢,目的在建構自動 SLA 合同合規系統。在 Faniyi 和 Bahsoon,以及 Singh 和 Chana 進行的研究中,可以找到與品質服務管理相關建議的詳盡綜述。考慮到這一點,提出了幾種策略來預測,應用的資源需求和 QoS 的要求。最近的工作試圖將安全性和 QoS 問題結合起來,以提供全面的性能指標。
(iii)最後,濫用雲端服務,是該領域的另一個問題。物聯網環境是霧和邊緣設備不斷加入或離開,動態的執行前後關聯。因此必須在網路邊緣提供彈性的服務。為此,在網路的可用設備之間,共享應用工作負載,可以為高階運算應用提供靈活性。提出了可靠的服務供應方法,來為系統提供更高的彈性,並提供靈活和優化的雲端服務。
在本主題中,將雲端框架和中間軟體技術,設置為與雲端層,以及具有不同介面操作系統,和體系結構的設備之間,進行通信的平台。
2.3. 物聯網在建築服務工程中
物聯網開發為在建築物上,開發數位服務提供了新資源。建築物中常見的物聯網應用,包括節能的過程環節、維護改進、雜務自動化和增強安全性。由於全球變暖,建築物的節能是一個重要的課題。
物聯網技術引入智慧建築,不僅可以減少本地溫室氣體排放,還可以將減少溫室效應擴大到更大的領域。目前,物聯網還被用於建築領域,以協助設施管理。物聯網使營運系統能夠提供更準確和更有用的資訊,從而改善營運,並為房客租戶提供最佳體驗。有基於物聯網的建議,這些建議顯示建築系統,如何與雲端進行通信,並分析所獲取的數據,以開發新的業務見解,從而能夠推動真正的增值和更高的績效。
實驗研究顯示,物聯網平台不僅可以改善,工業能源管理系統中實體的互連性,而且可以降低工業設施的能源成本。 FacilitiesNet 表示,建築物聯網(BIoT)正在推動我們獲取資訊,彼此互動和做出決策的方式發生重大轉變。BIoT 不僅與連接性或設備數量有關,而且還與交付實際和相關結果有關。當前,有很多基於物聯網的智慧家庭應用的例子。
然而,智慧設備或「物」,僅僅是連接到網路的設備或嵌入式系統。增值來自設計協調系統,和提供智慧服務,以提供實際收益的能力。這些特徵基本上,取決於對不同類型連接事物的異質性,及其互操作性的管理,並取決於數據處理提供的情報潛力。
Tolga 和 Esra 進行的研究得出的結論是,就智慧家庭系統中的軟體和硬體而言,物聯網技術尚未變得穩定。原因之一,有可能是物聯網技術仍處於發展階段。McEIhannon 所撰寫有關物聯網應用的邊緣雲和邊緣運算的未來,其評論得出了類似的結論。這篇評論提到概念和發展,目前還處於早期階段,從學術和行業的角度來看,許多挑戰都需要解決。
物聯網帶來了新的機會,但許多企業仍在尋求了解和分析,其將如何影響,並與現有的 IT 結構和管理策略整合。為此,必須創建專門的使用模式和技術,來彌合這一差距。
2.4. 發現
以下結論闡明了這項研究建議的新穎之處:
雲端運算作為「實用」的一般概念,非常適合智慧家庭應用的常規需求。但是,在某些情況下,將所有運算都移到雲端中,是不切實際的。
邊緣計算作為一種計算範例而出現,可以在物聯網設備生成的數據附近執行計算。這種範例可能有助於滿足最新應用的安全性和 QoS 的要求。
當前,控制子系統的高級建築設施,通常使用 Internet、IoT 協議和 Web 服務。專有系統是使用標準的 Internet 通信協議設計的,用於管制和監控。先前的工作顯示,基於無線感測器網路、Web 介面和工業控制模式,用於氣候控制、電源管理或安全性的控制系統,使用不同的監視和控制技術。監控應用分析,得自監控和數據採集系統中的這些子系統。對於不同的子系統,有不同的解決方案。考慮到上述情況,本工作中提出的模式,引入了以下新穎元素:
A. 介紹了一種分層架構(整合了邊緣和霧端等級),以及提供子系統之間互操作性,以及在建築物控制中開發智慧服務的方法,該方法使用了邊緣和霧端範例,這些範例將 IoT 協議整合在一起,並在本地 Intranet 中操作 AI 技術,讓雲端服務的通信層,完善了該層的架構。
B. 介紹了一種基於使用者為中心的方法,用於在互操作性需求下設計、驗證和改進新服務。
C. 該提案允許使用可以在已建的建築物中,實施的非專有硬體和軟體系統。
3. 計算模式設計
建築物中的設施子系統分為有照明、氣候、能源、安全、警報、電梯等。在自動化建築中,這些子系統由專門的控制技術控制和監控。在非自動化建築物中,不存在這些服務,並且子系統透過電子和電氣方式進行控制。在這兩種情況下,所有子系統都為建築營運,提供必要的服務。
從邏輯上講,每個子系統都在其場景中起作用,並且不能與其他子系統互操作。嵌入式電子控制器和連接的不同感測器,可以使每個子系統自動化。這些服務都是基於直接反應性控制規則。除了嵌入式控制系統和感測器之外,通信技術(基於 Internet 協議)和新的行動設備還為開發管制、監控和數據訪問服務,提供了新的可能性。
在智慧型動設備上開發,並連接到 Web 伺服器的人機介面和專用應用,是近年來已實現的服務的範例。每個子系統中的專家(氣候、安全性、電源等),都具有可以轉換為專家規則的知識。這些規則被轉換為用於管理、維護、控制、優化和其他活動的控制算法。這些規則是可以,在可程式設備上編程和實現的。但是,它們是靜態的,不會在出現新情況時發生變化,並且不能互操作,也無法適應每個安裝的特性。
例如,氣候或安全專家決定,如何使用標準啟動條件,來配置每個子系統。每個控制規則僅在一個子系統(此範例中為氣候或安全性)中工作,因此,這些子系統之間沒有互操作性。考慮到這種情況,提出的模式有助於並允許,基於不同子系統的互操作性,來整合新的數位服務,並將人工智慧(AI)技術的新服務,引入當前設施。
例如,諸如電梯控制的設施,可以用於安全服務或建築能源管理服務。氣候控制設施,可以與安全子系統整合在一起。整合到模式中的天氣預報軟體系統,可以由能源管理服務,或建築物空調服務使用。
目的是讓每個子系統中的專家,參與設計整合服務,並將所有子系統轉換為可互操作的系統。該模式會開發自動規則,並允許在考慮安裝行為本身的情況下進行決策。該模式基於一個過程,該過程包括四個開發階段(圖2)和分為不同級別的硬體 - 軟體體系結構(圖3)。該體系結構的主要等級,是邊緣等級和霧等級。這兩個層次介紹了在建築物中,應用物聯網技術的新穎性。下面介紹了模式的各個階段(分析、設計、實施和啟動)。
.分析:在此階段確定了不同的專家使用者(氣候、安全、電力、水、能源、管理人員,以及資訊和通信技術(ICT)技術人員)。諮詢專家使用者,以指定需要控制的主要過程。資訊通信技術專家作為整合環節,參與了這一過程。第一種方法產生了設計控制規則,和潛在服務所需的事物(對象)。在此階段,使用以使用者為中心的方法,並捕獲子系統的需求。
.設計:我們提出了一個三層架構(邊緣、霧端和雲端),如圖 3 所示。
.實施和數據分析:在此階段中已安裝和整合了子系統。服務基於每個子系統中的規則,分析事物(對象)生成的數據,以設計基於機器學習的服務。
.啟動:最初,在每個子系統的監督下制訂專家規則。然後,使用回饋過程安裝規則。最後,透過人工智慧技術,可以推斷出自動的和經過調整的規則。
3.1. 分析與設計
專家使用者對此過程,進行不同的審查。以使用者為中心的技術,用於設計整合流程。目的是獲得所需的所有事物(對象),它們之間的關係,以及潛在的服務。一旦指定了事物(對象)和服務,就必須關聯通信協議和控制技術。選擇了物聯網協議和嵌入式控制器;提出了人機介面;指定了邊緣層和霧層及其功能;分析專家規則和智慧服務。最後,提出了維護和操作方法。所有這些任務在專家技術人員,和資訊技術專家之間共享。
結果是事物的定義,它們之間的關係,以及與邊緣和霧層的交互作用。該過程中代表了建築物的所有子系統,數據感測器、執行器、控制器、規則和過程經過設計,可以整合所有子系統。數據集、對象和設備,由物聯網概念表示。事物由具有狀態和配置數據的實體,和前後關聯組成。事物數據位於霧和邊緣節點中,儲存的不同配置中的關聯性。
事物以數據向量表示:[ID、類型、節點、前後關聯情境]。
– ID是辨識碼。
– 類型可以是感測器、執行器、變量、過程、設備、介面、數據儲存,或可以在 IoT 生態系統中寫入、處理、通信、儲存或讀取數據的任何對象。
– 節點指定建築物子系統、功能描述、層類型(邊緣、霧端、通信或雲端)、IoT 協議和時程存取訪問。
– 前後關聯表示在 IoT 生態系統中,用於發布或讀取數據的時間、日期、位置,與其他事物的關係、狀態和訪問頻率。
表 1 是由事物([ID、類型、節點])。所有事物都可以訪問配置文件(CF),以了解如何使用可用數據,以及如何使用適當的訪問權限配置新數據。前後關聯數據位於內建記憶體,或是靜態儲存。使用定義的事物,設計不同的控制規則。這些控制規則是分佈在連接到網路的不同嵌入式系統中,控制過程的一部分。事物表示佈署在安裝的不同子系統中,所有的可用資源。在此等級上,設計師對所有事物進行分析、指定和關聯。基本控制算法是使用此資訊實現的。配置關聯性允許層和設備之間,所有事物的互操作性。
在此階段的另一級設計,必須提出物聯網管理中,使用的節點要求和規範。設計的流程和服務,將在邊緣或模糊節點中實施。必須指定每個節點,以確定其內部功能、通信及其服務。在獲取數據的地方,開發了智慧和處理能力。邊緣和霧層的節點,位於數據感測器、執行器和控制器附近。本文提出的方法,使用具有兩個功能的兩層(邊緣和霧端)。每一層都可以佈署互連節點的網路,以促進互操作性。
邊緣和霧層的功能是:
邊緣層功能:在連接感測器/執行器的嵌入式設備上,開發的控制軟體。某些 AI 算法可以安裝在邊緣節點上。中央處理器(CPU)和計算資源有限。安裝了通信介面,以允許在本地網路中進行整合。
霧層功能:局域網級別的通信、AI 範例、儲存、配置關聯性和監控活動。霧節點透過處理、通信和儲存,來處理 IoT 的Gateway、伺服器設備,或其他設備中的數據。在此等級實施本地、全球的整合服務。利用這些節點的硬體、軟體和通信功能,開發了基於機器學習範例的算法。霧層設備還可以在很少單位的設施或服務中,執行邊緣節點功能。
透過這兩個等級,可以優化建築設施,以獲得不同子系統之間的整合和互操作性。
表 1 顯示了每件事與關聯性配置,和節點規範的關係。節點標識其所屬的子系統(控制、能源、氣候等),層(霧端、邊緣、通信和雲端)及其執行的功能。
3.2. 架構設計
在分析和設計階段,獲得對象(事物)及其關係。規範和要求用於實現每個層。實施取決於提供所需功能的設計,和現有技術(硬體、通信和軟體)。在此階段,開發了一種適合現有設施的體系結構。物聯網協議提供互操作性,而 AI 範例則提供了適應性和優化性。邊緣運算節點用於控制設備,霧運算節點安裝在本地網路節點上。這些等級為配置、安裝和運行新流程,提供了強大的資源。
物聯網協議,傳達所有子系統數據。每個子系統由對象/事物(虛擬等級)組成,安裝為可連接的感測器/執行器/控制器設備(硬體等級)。
物聯網通信中,針對建築場景建立的要求是:標準協議、低功耗、易於存取訪問和維護、支援整合新模組,非專有硬體或軟體,以及低成本設備。
MQTT 協議,是目的在用於提供整合和互操作性資源,異構通信場景的主要物聯網協議之一。該協議被提議作為感測器、執行器、控制器、通信設備,和子系統之間的通信範例。
MQTT 協議的一些主要功能,在不同的著作中有所顯示,這使其特別適合於這項研究。他們之中有一些是:
.它是針對資源受限的場景開發的發布 - 訂閱消息協議。
.它具有低頻寬要求。
.這是一個非常節能的協議。
.編程資源非常簡單,使其特別適合於嵌入式設備。
.具有三個 QoS 等級,它提供了可靠和安全的通信。
MQTT 開發了無所不在的網路,該網路支持 n-m 節點通信模式。任何節點都可以查詢其他節點,並對其進行查詢。在這些情況下,任何節點都可以充當基地台的角色,能夠將其資訊傳輸到遠端處理位置。無處不在的感測器網路(USN)中的節點,可以處理本地數據。如果使用 Gateway,則它們具有全局可訪問性;他們可以提供擴展服務。
節點(邊緣或霧),可以具有本地和全局存取訪問權限。這些設施具有不同的可能性和益處。本地數據處理,對於基本過程控制是必需的,而全局處理則可用於模式檢測和資訊生成。從這個意義上講,擬議的平台使用了組合功能:連接到 IoT 雲端服務,本地網路區域上不同的 USN。在這種情況下,運算層(邊緣或模糊等級)將用作控制流程和雲端服務之間的介面。該層可以在與雲端進行通信之前,進行處理數據。
實現邊緣和霧端運算節點需要執行三個操作:
.連接和通信服務:所有設備必須在同一網路中,並且可以互操作。所有感測器和執行器都可用於開發服務。此活動的一個示例,是在 Internet 上遠端讀取建築物的電源參數、環境條件和開放的天氣預報數據。此活動中應實現其他功能,例如連接的安全性、可靠性和互操作性。
.嵌入式設備(邊緣運算層)中的控制算法和數據處理:在此活動中,這些設備中實現的基本控制規則和數據分析服務,可以開發新功能。此階段可以應用於數據過濾、運算氣候數據或分析功耗、直接反應控製,或使用模式辨識技術檢測事件。
.Gateway 節點(霧運算層)上的高階服務:此等級使用和管理 AI 範例,和 IoT 通信協議。霧運算節點對數據執行智慧分析,對其進行儲存,過濾並將其傳遞到不同等級,以糾正較低級別的新控制措施,或者生成雲端中服務感興趣的資訊。此階段的應用示例,包括分析新模式、預測用水量,或功耗、智慧檢測和其他預測服務。
3.3. 測試與回饋
在測試階段使用標準方法,邊緣和霧層提供不同的功能。提出了針對不同子系統的機器學習模式,並且可以將其安裝在邊緣或霧節點上。必須執行以下操作,來測試機器學習應用:
A. 定義和捕獲數據集:必須辨識、捕獲和儲存主要變量。在不同的建築子系統中,過程數據集是由連接到邊緣層的感測器捕獲的數據。使用通信協議監控和儲存數據集。一個案例是電表,該電表在配電盤中連接到嵌入式設備(邊緣節點),該嵌入式設備傳送電力數據,以在霧節點設備中儲存和處理。
B. 訓練數據集和形式辨識模式。先前數據集的一個子集,用於訓練不同的模式。評估針對從未用於訓練的數據測試模式,此過程的結果已由專家使用者驗證。目的是獲得一組代表性的結果,以了解模式在現實世界中的表現。
C. 實際場景中的驗證:必須在邊緣和霧節點上,實施新的服務和控制算法。這些模式具有用於分析數據,實施特定模式,並使用結果開發最佳參數的算法。在此階段,可以修改或進行改善模式。
D. 用統計術語和模式演變,得出測試結果:基於 AI 算法的模式而將產生近似值,而不是精確的結果。分析應用結果以確定置信度,並允許模式演化。該活動支持開發新的 AI 服務,或對已實現的算法進行修改。有監督的自動更改,是維護和改進系統的過程。此階段的過程,包括所有模式層。
建議對使用邊緣和霧,任何的安裝進行這些活動。如前所述,該模式既可以安裝在既有舊的建築物中,也可以安裝在新建築物中。對於新建築設計,基於建議模式的安裝更易於整合。此外,可以提供的服務的潛力,也使其對於既有建築物具有吸引力。
4.在建築子系統中,實施智慧服務
該模式在預先存在的住宅建築物上,進行了測試。設計和實施電源管理、管制和監控服務。物聯網協議(MQTT 和 HTTP)和 ML 範例,用於建議的層體系結構。基於 KNN 的機器學習方法,和樹決策算法用於管理功耗(家用電器),和可再生能源發電(風能和太陽能)。使用房屋中的霧節點,在雲端平台上實現監控和統計數據。該節點連接到控制可再生,和家用電器子系統的不同邊緣節點。
在圖 6 中,邊緣節點,整合在先前安裝的可再生子系統中。透過邊緣層上的這種新設備、電源管理、安全控制和操作流程得以整合,並且可以與其他子系統互操作。可以設計新的智慧服務。邊緣節點將數據傳輸到霧節點 Gateway,該 Gateway 管理功耗和發電,並控製家用電器。該節點中的輸入,是可再生能源發電的數據。輸出控件是 ON-OFF 開關,用於優化發電、安全性和操作。
4.1. 分析與設計
分析了住宅建築,以設計電源管理,安全和控制服務。 在第一種方法中,所需的主要事物(對象),它們之間的關係和不同的服務,如表 2 所示。
4.2. 執行
分析房屋中的建築子系統,以整合這個執行模式層:邊緣控制、霧服務,與雲端的通信和雲端服務。 選擇了本實驗工作中使用的感測器、執行器和控制過程(事物)。 表 3 列出了使用的嵌入式設備。
家庭服務中的控制過程,需要反應時間和互操作性。人機介面、數據存取訪問和分析服務,是本地和雲端運算上的服務。上面提到的兩個需求,都使用不同的協議處理:控制/通信上的 MQTT,和雲端服務上的 HTTP(RESTful API)是用於整合,並使所有子系統互操作的 IoT 協議。在提出的該層模式中,還使用 MQTT 協議、控制、數據處理,以及使用 RESTful 協議,到雲端的數據通信,來開發機器對機器(M2M)應用。
MQTT 使用開放的消息協議,該協議可以將遙測樣式的數據(即在遠端位置收集的測量結果),以消息的形式,從設備和感測器,沿著不可靠或受約束的網路傳輸,到伺服器(BROKER)。消息是簡單、緊湊的二進制數據包,有效載荷(壓縮的標頭,比超連結傳輸協議(HTTP)少得多的詳細資訊),並且非常適合推送簡單的消息傳遞方案,例如溫度更新或移動通知。例如,消息也可以很好地用於,將受約束的或更小的設備,和感測器連接到 Web 服務。
MQTT 通信協議,使所有對象可以互操作。透過此協議實現的發布者和訂閱者模式,可以互連所有設備和事物。該通信層由安裝在霧節點上的代理設備管理。不同的發布者和訂閱者,在不同的節點上實現。安裝了一個 Gateway 設備(霧節點)和兩個嵌入式控制器(邊緣節點),來控製家用電器和電源管理。事物和流程佈署在所有節點上。
邊緣節點控制子系統,霧節點根據決策樹,以及專家定義的規則,實現 AI 範例。霧設備將數據傳輸到雲端平台,以開發儀表板螢幕,來監看子系統的狀態。
可以開發新的雲端平台服務:事件檢測、機器學習處理、統計分析等。專家使用者設計基本的控制算法。在學習和訓練過程之後,將根據專家系統的結果,對這些算法進行調整和修改。在這項工作中,目標是在不損失生產力的情況下優化資源(控制和能源)。在邊緣或霧節點中,執行不同的控製過程;分類過程和決策樹在霧節點中實現。算法以 Python 語言實現。此語言的開源庫用於不同的應用。
4.3. 佈署與測試
對於現有建築物,邊緣節點交錯插入已安裝的控制器、配電板,以及感測器和執行器中。如果在分析階段指定了新的東西(電錶、氣候和控制器),則會安裝一些新的感測器/執行器。這項工作中佈署的邊緣節點具有以下優點:
.請勿干擾先前的安裝操作。
.他們使用新的專家規則和自動規則,引入新控件。
.他們測試和重新配置,在分析、學習和測試驗證中,設計更新的專家規則。
圖 7. 佈署在配電盤中的節點。 使用 IoT 協議通信,在不同節點中開發數據捕獲、控制算法、數據分析、儲存和通信服務
在電力管理過程中,專家使用者根據電力消耗、發電量、消耗負荷曲線、氣候數據和氣候預測數據,對具有選定流程的時間表,進行可程式處理。邊緣節點捕獲數據,並將其發送到霧節點。
霧節點處理室內和室外環境的日記數據,以及天氣狀況。霧節點還可以捕獲其他感測器數據。對房屋中的這些數據消耗和生成方式,進行檢測和分類。消費和發電結果,作為數據添加,以便與儲存的數據一起進行分析。可以使用機器學習方法開發,作為家用電器或人類活動檢測的智慧服務(圖8)。
4.3.1. 機器學習:數據捕獲過程(邊緣節點)和家用電器分類(霧節點)
連接在主配電盤中的電表,用於捕獲數據,並使用標準的 K 近似值,最近鄰(KNN)分類算法,來開發形式辨識模式。 KNN 是機器學習系統中最常見的方法之一。電表捕獲電流;如果連接了新的家用電器,則電流數據會更改。不同的家用電器具有不同的變化等級。
用於辨識家用電器的不同模式的主要變量,是連接時的電流水準差異。數據捕獲過程流程圖(圖9),顯示了在邊緣節點中實現的算法,以捕獲預處理並傳遞電力數據。
在此過程中,監督階段使用訓練數據集。接下來,真實場景中的驗證,將測試分類模式。家用分類設備將用於不同的服務:人類活動的辨識、負載控制、可再生能源管理、空調、安全性等。在訓練階段,已捕獲了不同的家用電器開機,以獲得一組形式。每個家庭都有一個矩心向量,將用於分類過程中的檢測。如上面所示的算法所示,分類器處理將產生連接時的電流數據作為輸入。KNN 分類過程流程圖(圖10)描述了 KNN 方法,它在霧節點中實現。
4.3.2. 可再生電源管理。控制電力自耗的決策樹
每個建築物都有不同的需求曲線,以及在接入電網方面的特定情況。為此,整合和可互操作的設施,可以實施適用於每種情況的不同解決方案,從而提供對太陽風資源的最佳管理,優化電源效率,簡化管理流程,並實現最高的成本節省。當可再生能源超過消耗的能源時,在使用 AC 耦合到電網的設施中,會出現問題。
在實驗工作中,太陽能在一天的中央時段的能量,大於所消耗的能量(圖11)。但是,在分析了消耗曲線之後,可以在這段時間內連接負載,以避免注入電網。可以透過設計一種算法,來滿足這一要求,該算法可以預測,何時發生此事件,以自動連接不同的負載。利用所有感測器和執行器的整合,和互操作通信,已經開發了在不同節點中,所實現的算法(圖12)。
13. 在電源管理子系統上開發的決策樹。 它由專業使用者設計,並整合在邊緣節點上。該決策樹的目的,在優化可再生能源的使用。
4.3.3. 基於 Edge 和 Fog 節點的 Control Home
圖 14 顯示了安裝在住宅房間中的邊緣節點。 該節點可以控制四個設備(設備),並捕獲感測器數據(功耗、發電量、溫度、濕度等)。該設備可以使用 MQTT 協議進行通信。該協議允許設備之間,進行其他類型的通信:智慧手機、新邊緣節點等。圖 7 和圖 14 顯示了可以在其他建築物中,佈署的標準實現。在所有系統中,都有配電板,這些配電盤佈署了霧節點和邊緣節點,如圖所示。
4.3.4. 使用物聯網協議的雲端服務
雲端服務可以監控,透過霧節點或人機介面(HMI)訪問的數據。 IoT 協議(MQTT)從任何已連接 Internet 的設備推送數據。事件檢測、儲存統計分析等其他服務,完善了該資源的功能。提供類似服務的不同平台,顯示了商用物聯網技術的狀態:Amazon IoT、Microsoft Azure、Ubidots 和 Thingspeak,是提供 IoT 平台的公司一些案例。提供了資源以及客戶端,和 IoT 平台之間的應用程式介面(API)通信,以便可以使用它們。
用於設計儀表板監控和管制的 HMI 資源,是這些平台上的主要實用功能之一。霧節點使用雲端 API 傳達數據和資訊,可以實施其他控制服務。在這些雲端平台上,預先建構了用於監控數據的儀表板設計。使用 API 實用功能,霧節點中的過程處理,會將數據發送到每個儀表板。API 文件指定了在設備、IoT 平台和 Mobile-Alerts Cloud 之間,交換數據的結構,以及用於加速項目的代碼案例和形成資料庫。
圖 15 顯示了在 Ubidots 雲平台上,設計的儀表板。Ubidots是本實驗工作中使用的物聯網平台。該模式可以在實現這些協議的層,和平台中使用不同的標準協議。圖 16 顯示了在雲端平台中,IF 變量 THEN 動作的事件配置。大多數物聯網平台,都提供此功能。
5. 結論
為了設計物聯網系統,越來越多地提出邊緣霧模式。但是,每個範例都提供特定應用領域的解決方案。不同子系統之間的整合和互操作性,可以改善這種情況,並提供更好的服務。這項工作的主要目的,是透過提出一種基於邊緣層和霧層,兩層體系結構的運算模式,來解決這個問題。透過這兩層,可以基於使用邊緣或霧節點中,嵌入式的設備捕獲數據所產生的新型有用資訊,來設計和開發新服務。這些節點使用雲端平台和 IoT 協議(例如 MQTT)。
MQTT 是作為不同層(霧 – 邊緣 – 雲)之間提出的通信協議,並進行實驗的。雲端平台用於開發儀表板的面板資訊和 Internet 上的新服務,例如控制、儲存和通信事件。該平台可用於透過 API,交付不同的服務。
該模式可以在現有建築物和新建築物中,開發這些服務。在這種情況下,要求每個子系統中的專家和專業人員,參與新服務的設計。
為了測試該模式的功能,並顯示如何在實際設施中,實現該模式,在住宅中進行了一項實驗性工作。在此霧和邊緣節點前後關聯中,描述了實現的幾個範例。開發了模式辨識和決策樹方法,以展示人工智慧在設計 IoT 解決方案中的潛力。已安裝服務的結果顯示,邊緣和霧節點佈署,產生了預期中整合和互操作性的好處。
提出的工作演示了,如何將邊緣和霧範例,整合到可以增強其優勢的新架構中,從而擴展了應用領域。該體系結構的主要科學貢獻,是整合、技術的互操作性,及其為開發 AI 服務提供的設施的範例。所有這些改進,都在已開發的實驗的不同示例中顯示。具體的優化和改進,將在以後的工作中進行。此外,使用機器學習平台,和 AI 範例的新控制規則,將確保可以創建和改進新的智慧服務。
附圖:圖1.自動建構子系統和資訊技術環境。
圖2.基於使用者為中心關係的模式。
圖3.通信架構。 每個等級都有不同的功能。 提出了兩個通信等級:IoT(使用消息隊列遙測傳輸(MQTT))和 Web(使用代表性狀態傳輸(REST)協議)。這些協議的層,涵蓋了已建立的整合和互操作性要求。
圖4. 在建築物的現有設施上實施的邊緣霧架構示例:邊緣節點是較低的層次,必須與安裝的設備進行新連接。互連所有子系統的霧節點,是透過整合連接到邊緣節點的新設備來實現的。邊緣和霧節點,可以佈署在所有建築物子系統中。
圖5. 住宅建築中的第一個實驗工作。
圖6. 整合在先前安裝的可再生子系統中,邊緣節點的示例。 該節點可以使用新算法控制 ON-OFF 開關,以管理發電過程,以及通信和監控電源數據。
表1.事物示例描述。寫入 ID、類型和節點數據,以配置 XML 文件。配置關聯性儲存在霧節點中。
表 2. 實驗工作中的分析和設計要求。
表 3. 實驗室內使用的嵌入式設備。
圖 7 顯示了分佈在配電板上的節點(邊緣和霧狀)。在此節點中,設計並安裝了功率計、ON-OFF 開關控件和 AI 服務。
圖 8. 佈署的智慧電源功能。在霧節點中實施的分類過程,可用於檢測電連接和人類活動。可以使用 IoT 通信實現其他服務
圖9. 邊緣節點中捕獲,並預處理的用電量數據;MQTT 協議用於通信數據。另外,其他節點可以使用捕獲的數據,來提供其他智慧服務,佈署了整合和互操作性。
圖10. 分類過程。處理捕獲的電數據以檢測家用電器連接。可以使用 IoT 協議整合,來設計其他智慧服務。
圖11. 該圖顯示了實驗工作中的消耗和生產數據。 在自儲存的電力自備設施中,沒有儲存並且沒有注入電網,所產生的能量必須即時使用,並且不得超過所消耗的能量。 能源經理必須預測此事件,並提前連接電荷。
圖 12. 用電自耗設施中的可再生電源管理。
圖 13 是在電源管理子系統中,開發的算法的示例。 可以在邊緣節點上安裝此過程。該節點獲取氣候數據預測,並預測系統是否可以在不儲存的情況下,使用可再生能源。
圖14. 佈署的邊緣節點。該節點可以使用新算法,控制 ON-OFF 開關,並可以在每個房間或建築物中,通信和監控感測器數據。
圖 15. 在雲平台上配置的儀表板。顯示了風力發電數據和預測風力。
圖 16. 在雲端平台上配置事件的儀表板:IF 事件 THEN 動作。 該服務顯示了,如何使用雲端訪問來控制設施。與霧節點的 Internet 通信,可以控制建築物中的不同子系統,並使用電子郵件,SMS 或其他 Internet 服務來通報事件。
資料來源:https://3smarket-info.blogspot.com/2021/02/iot-edge.html?m=1&fbclid=IwAR0uijX5WdNrfzmGjVsakFGaEsWivPgyH1zumxVr7fwvvgqtdFFTI6jJXS8
同時也有448部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,TQC+Python基礎程式語言應用班第1次上課(環境設定與基本語法) 01_問卷結果與懶人包 02_課程內容說明 03_建置Python開發環境與spyder設定 04_變數型態與轉型說明 05_存檔與邏輯判斷 06_邏輯判斷改為多重邏輯 完整教學 http://goo.gl/aQTMFS ...
「python if 多行」的推薦目錄:
- 關於python if 多行 在 台灣物聯網實驗室 IOT Labs Facebook 的精選貼文
- 關於python if 多行 在 Eric's English Lounge Facebook 的最佳貼文
- 關於python if 多行 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於python if 多行 在 吳老師教學部落格 Youtube 的最佳貼文
- 關於python if 多行 在 吳老師教學部落格 Youtube 的最佳貼文
- 關於python if 多行 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於python if 多行 在 Lesson 10 If-else 條件語法.ipynb - Python Basics - Google Colab 的評價
- 關於python if 多行 在 Python - 100天从新手到大师 - GitHub 的評價
- 關於python if 多行 在 Python 流程控制:if 判斷式By 彭彭 - YouTube 的評價
- 關於python if 多行 在 How do I break a string in YAML over multiple lines? 的評價
python if 多行 在 Eric's English Lounge Facebook 的最佳貼文
[教育資源] 美國哈佛大學線上課程
Here are more free classes from Harvard while we are stuck at home waiting for school to reopen! The following are seven courses that will help prepare you for the challenges of today’s dynamic and fast-changing world.
當我們被困在家等待學校重新開放時,有更多來自哈佛大學的免費課程提供給大家! 這裡提供七項課程來幫助大家,應對來自當今這充滿活力與快速變化的世界的挑戰。
★★★★★★★★★★★★
1. Introduction to Computer Science 電腦科學導論
https://www.edx.org/course/cs50s-introduction-to-computer-science
Knowing how to code is a vital skill in in today’s digital world. This entry level course teaches the basics of computational thinking, programming problem solving, data structures, and web development, among other things. It will leave the learner able to code in several languages including C, Python, and Java.
在當今的數位世界中,知曉如何編碼乃是至關重要的技能。 本入門課程教授運算思維、程式編寫與問題解決、資料結構和網頁開發等基礎知識。 它將使學習者能夠使用多種程式語言包括C,Python和Java進行編碼。
★★★★★★★★★★★★
2. The Architectural Imagination 建築的想像力
https://www.edx.org/course/the-architectural-imagination
Art and science are often viewed in opposition to one another, but in the field of architecture they meet in fantastic and beautiful ways. In this class, students will learn both the technical and cultural aspects of architecture, and gain a better understanding of how the buildings we inhabit relate to history, values, and pragmatic concerns.
人們常常將藝術與科學放在對立面,但在建築的領域,它們以奇妙而優美的方式相遇。在本課程中,學生將學習建築的技術和文化層面,並更好地了解我們所居住的建築與歷史、價值和實用主義的關係。
★★★★★★★★★★★★
3. Super-Earths and Life 超級地球與生命
https://www.edx.org/course/super-earths-and-life
What life lies beyond our small world? Thirty years ago we only knew about nine planets; today we know of thousands nearby stars. In this course, students will learn about exoplanets, which ones might be the best candidates for harboring life, and why those planets are of the greatest interest. Combining concepts in astronomy and biology which have rarely been put together before, the class is an excellent introduction to one of the most interesting eras in astrobiology; today.
在我們的小小世界之外,還有什么生命存在? 三十年前,我們只知道九大行星。 如今,我們知道附近有數千顆恆星在沿著軌道運行著。 在本課程中,學生將學習系外行星的知識,哪些可能是庇護生命的最佳選擇,以及為什麼這些行星最受關注。該課程將天文學和生物學的概念相結合乃少有前例,這堂導論在如今這個天文生物學領域中最有趣的時代之一是極精彩的。
★★★★★★★★★★★★
4. Leaders of Learning 學習的領導者
https://www.edx.org/course/leaders-of-learning
How do you learn? Why do you learn? Can you name three people who would share your answers? In this class, students will identify their own style of learning and find out how that style fits into the ever-changing landscape of education. Later lectures focus on how to apply that knowledge to leadership, organizational structure, and the future of learning.
你如何學習? 你為什麼要學習? 你能說出三個可以分享答案的人嗎? 在本課程中,學生將辨認自己的學習風格,並了解該風格如何適應不斷變化的教育環境。 後段課程聚焦於如何將這些知識應用於領導力、組織結構和未來。
★★★★★★★★★★★★
5. Using Python for Research 運用Python於研究
https://www.edx.org/course/using-python-for-research
Do you want to learn to code, and then learn how to actually use it? In this course, students will review the basics of the Python coding language and then learn how to apply that knowledge to research projects by means of tools such as NumPy and SciPy. This class is an intermediate level course, and a basic understanding of the Python language is ideal before beginning.
你想學習編碼,然後學習如何實際使用它嗎?在本課程中,學生將回顧Python編碼語言的基礎知識,然後學習如何通過NumPy和SciPy等工具將這些知識應用於研究計畫。 該課程是中級課程,在上課之前對Python語言有基本的了解為佳。
★★★★★★★★★★★★
6. American Government 美國政府
https://www.edx.org/xseries/harvardx-us-government
The federal government of the United States can seem like a far off and alien system, one which acts in strange ways; but it is a powerful force in the life of every American. To not understand how it works, and your place in it as a citizen and voter, is to be an irresponsible citizen. This course introduces students to the function, history, institutions, and inner workings of American government. No previous study or understanding of American politics is required, making the course ideal for non-American students who want to understand what exactly is going on there.
美國聯邦政府看起來像個運作方式奇特,遙不可及的陌生體系。 但在每個美國人生活中這是一股強大的力量。 如果不了解它是如何運作的,以及自己作為公民和選民在其中所處的位置,會成為不負責任的公民。 本課程向學生介紹美國政府的職能、歷史、機構及其內部運作。 無需對美國政治的事前學習與了解,使該課程成為想要了解美國到底發生了什麼的非美國學生的理想選擇。
★★★★★★★★★★★★
7. Humanitarian Response to Conflict and Disaster 人道主義對衝突與災難的應對
https://www.edx.org/course/humanitarian-response-to-conflict-and-disaster
We live in a world with staggering humanitarian crises, and responses to them that are often lacking. In this class, students will ask questions on how to deal with humanitarian disasters through the case studies of Zaire, Syria, The Balkans, and elsewhere. The history of humanitarian responses, and the frameworks that those responses past and present operate in, will be covered as well, and students will be challenged to ask if they remain sufficient.
我們生活在充滿令人震驚的人道主義危機的世界中,而對這些危機往往缺乏應對。 在本課程中,學生將通過薩伊、敘利亞、巴爾幹地區和其他地區的案例研究,提出有關如何應對人道主義災難的問題。本課程還將涵蓋人道主義應對的歷史以及過去與現在的應對所運行的框架,並且挑戰學生去提出這些應對是否足夠。
★★★★★★★★★★★★
美國名校的免費線上課程 (MOOCs)
https://bit.ly/2Um51WO
英國名校MOOC平台
https://bit.ly/3eYUOYe
留學獎學金: https://bit.ly/3e9vrT0
★★★★★★★★★★★★
英文資料來源: https://bit.ly/2Y7p1gR
圖片來源: https://bit.ly/2UipYC2
★★★★★★★★★★★★
教育時評:http://bit.ly/39ABON9
python if 多行 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Uniswap 解析:恆定乘積做市商模型 Constant Product Market Maker Model 的 Vyper 實作
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
在 🦄 Uniswap v2 到來之前徹底了解 v1 的設計與演算法!
Image source: https://uniswap.org/
Outline
一. 前言二. 恆定乘積做市商模型 Constant Product Market Maker Model 1. 計入手續費 2. 程式碼結構 3. 演算法核心與實作 4. 段落小結三. 流動性 Liquidity 1. 第一筆流動性注入、決定k值 2. 除了第一筆以外的情況四. 結語
一. 前言
暨上一篇開始接觸了 Vyper 後,我找了 Uniswap 的程式碼來更加熟悉 Vyper 的實作方法,順便研究了其演算法,然後就又寫了一篇 xD
類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做
Uniswap 是以太坊上非常成功的自動做市商 Automated Market Maker (AMM)。本次我將用的 Uniswap 的程式碼搭配由 Runtime Verification 這家審計公司對 Uniswap 所做的形式化驗證結果來解釋恆定乘積做市商模型的 Vyper 實作 (2018 審計時 Uniswap 就已經是用 Vyper 而非 Solidity 了):
智能合約程式碼:https://github.com/Uniswap/uniswap-v1/blob/master/contracts/uniswap_exchange.vy
合約審計結果:https://github.com/runtimeverification/verified-smart-contracts/blob/master/uniswap/x-y-k.pdf
本文將以講解實作概念及數學推導為重點,程式碼的部分只是輔助。審計結果將恆定乘積做市商模型演算法的數學推導寫得非常清楚而有趣(?),建議有興趣者可以整份看過一遍,相信得到很多收穫!
至於更多 Uniswap 的介紹有興趣者可以參考 吳冠融 Roger Wu 所撰寫的簡介與使用流程:
解析 DeFi 項目《Uniswap》(一)Uniswap 是什麼?
解析 DeFi 項目《Uniswap》(二)Uniswap 如何使用?
在開始前的最後,先預告本文頗長,所以來播個被 Youtube 推薦的歌吧:
二. 恆定乘積做市商模型 Constant Product Market Maker Model
交易所如果要去中心化、也不使用掛單 order book,就需要靠演算法自動算出交易標的的數量與價格,而 Uniswap 使用名為恆定乘積的演算法,其來源可追溯自 Vitalik 的這篇文章:點我。
公式非常的簡單:x * y = k。令交易的兩虛擬貨幣為 X 和 Y,各自數量為 x 和 y,兩貨幣數量的乘積 x * y 恆等於 k,k 值是由第一筆注入的流動性所決定 (於 三. 流動性 Liquidity 解釋)。
因此,用 ∆x 數量的 X 幣來購買 Y 幣所能得到的數量 ∆y、或是為了購買 ∆y 需要付出的 ∆x 數量,依照此公式進行計算:(x+∆x)(y-∆y) = k,而交易的價格就是兩幣量 ∆x 和 ∆y 的比。
以下公式用 α = ∆x / x 和 β = ∆y / y 來表示 ∆x 和 ∆y 及 X Y 兩幣在交易發生後的新均衡數量:
圖一
1. 計入手續費
在 Uniswap 進行的每一筆交易都會被收取 ρ = 0.003 / 0.3% 的手續費回饋給流動性提供者 liquidity provider ,因此要將手續費納入公式的考量:
圖二
上圖的公式或許不太直覺,我建議不要從 x’ρ 及 y’ρ 開始理解,而是從 ∆x 和 ∆y 兩值開始:手續費 ρ = 0.3% 的意思是會從付款中扣掉 0.3 %,也就是從 ∆x 扣。在有手續費的情況下 ∆x 就變成了 (1-ρ)∆x ,若令 γ = 1-ρ 則為 γ∆x。因此,將圖一中的 ∆x 換成 γ∆x,就會得到以下式子:
source: https://www.codecogs.com/latex/eqneditor.php
將等號左方的 γ 移到右方後就得到了圖二中的 ∆x。同理,由於 ∆y 中的 α = ∆x / x ,用 γ∆x 代換 ∆x 就會得到圖二中的 ∆y (有 α 的地方乘上 γ )。而 x’ 還有 y’ 就可以由 ∆x 和 ∆y 推出來了!
然而,將圖二中得到的 x’ 和 y’ 相乘,會得到:
source: https://www.codecogs.com/latex/eqneditor.php
也就是說,當有手續費使得 γ != 1 /ρ != 0,x’ρ * y’ρ 的值其實會稍微和 xy = k 不同:在實作上 γ = 0.997 / ρ = 0.003,因此 1/γ-1 ≒ 0.003。β = ∆y / y 代表的是換得的 Y 幣佔總量的比例,即使最大值為 1,誤差也只有 1 * 0.003,故可知手續費 = 0.3% 對於 k 值的影響極小。
2. 程式碼結構
了解了基本的公式後,就可以開始研究程式碼是怎麼撰寫的。首先來看各個函式的功能:
addLiquidity() 及 removeLiquidity():轉入與轉出資金,留到 三. 流動性 Liquidity 中說明
getInputPrice() 及 getOutputPrice():最主要的函式,用以計算給 ∆x 所能換得的 ∆y 數量、以及為了得到 ∆y 所要支付 ∆x 的數量。此兩函式會被其他負責進行交易、匯幣的函式使用
三組 (eth->Token, Token->eth, Token->Token) 的 swap() 及 transfer():swap() 的收幣人就是付款人、transfer() 的收幣人不是付款人而是指定的對象。基本上這兩函式就是呼叫 getInputPrice() 或是 getOutputPrice() 後進行匯幣的動作,因此不再多做解釋
3. 演算法核心與實作
在研讀程式碼前,先回顧一下 ∆x 和 ∆y 的公式:
首先我們考慮用 ∆x 所能購買到的 ∆y 的 getInputPrice():
什麼…就這幾行程式碼?是的。
以上的程式碼和公式表達方式不同,因此先將 α = ∆x / x 和 β = ∆y / y 代換回來並將上下同乘 x:
source: https://www.codecogs.com/latex/eqneditor.php
由於 γ = 0.003,可以將上下同乘 1000 後得到:
source: https://www.codecogs.com/latex/eqneditor.php
接著就能來對照程式碼了:
(109行) numerator: input_amount 是欲支付的 X 幣數量 ∆x、output_reserve 是 Y 幣數量 y,再乘上 997 後就是等式右邊的上方 (= 997∆xy)
(110行) denominator: input_reserve 是 X 幣的數量,乘上 1000 再加上剛剛算過的 997∆x,就得到了等式右邊的下方 (= 1000x + 997∆x)
此處要注意的是 Vyper 的除法是無條件捨去,等同於 floor() 函式。這會不會造成嚴重的影響呢?如果熟悉 ERC20 的人應該記得,在發幣時輸入的四個參數中有一個參數代表小數點的位數,如同下方程式碼中的 2 代表最後兩位在小數點後。舉例來說,當 getInputPrice() 收到 1234567 為這個幣的 input_amount 時,代表使用者擁有的幣的數目實際上是 12345.67。因此,即使將結果捨去 0.67 後的數字,影響真的不大,況且如果不捨去而選擇無條件進位,那代表交易所反而要虧損一點點啦,太佛心了吧 xD 有興趣者可以看看審計報告的內容,有更詳細地去定義這些誤差所影響的範圍!
再來我們看若要購買 ∆y 需要付出多少 ∆x 的 getOutputPrice()。
一樣先將 α = ∆x / x 、β = ∆y / y 和 γ = 0.003 代換並上下同乘 1000y 得到:
source: https://www.codecogs.com/latex/eqneditor.php
我們已經看過 getInputPrice() 一次了,所以應該能發現第 122–124 行得出的結果和上式相同。要注意的是這邊的結果反而是無條件捨去後直接 +1,因為這是在計算使用者要付多少 ∆x 才能購買到 ∆y,為了不讓交易所虧只能選擇請使用者多付一點點。
4. 段落小結
以上就是撇除匯幣等函示,恆定乘積做市商的 Vyper 實作,沒錯就這樣而已!Uniswap 之所以可以做到低 gas 消耗就是因為這個演算法本身就非常簡單,所需的運算也就是兩三次乘除法而已!
不過我們還沒結束,接下來要談談如何投入資金/注入流動性,而這部分也包含了決定 k 值的精妙機制!
三. 流動性 Liquidity
流動性指的是交易市場中能夠交易的資金/標的物的量。使用自動做市商 (AMM) 而非掛單的最大好處就是市場一定會有流動性,而缺點就是如果交易量越大就會造成越大的滑點 Slippage,意思就是交易價格變動會越大、得到的價格越差 。
source: https://ethresear.ch/t/improving-front-running-resistance-of-x-y-k-market-makers/1281
我們可以用上面提到的 V 文章中的圖片來迅速帶過,畢竟有關注 Uniswap 的讀者大概都已經看過這圖很多次了。
當要兌換的幣的數量越大/占比越重,例如:20% Y 幣的流動性,就會造成要付出比兌換少量時極為不對稱的高額 X 幣。
接著我們要來探討注入流動性的原則,依照市場是否已經有流動性而區分為兩種情形:
1. 第一筆流動性注入、決定 k 值
以下程式碼是 addLiquidity() 函式中 46-48, 51, 及 64-74 行。當市場上還沒有任何流動性時,不會滿足第 51 行而是進入 64 行的 else。
在第 65 行我們可以看到 msg.value ≥ 10¹⁰,以及在 67 行 token_amount 就是其中一個輸入值 max_tokens。這邊代表的是第一個注入流動性的使用者可以自行決定要注入多少 Ether (≥ 10¹⁰) (= x) 以及相應的幣的數量 (= y),也就是上方提到的 k 值 (= x* y),在本例的 X 幣就是 Ether。(本處先不解釋剩餘的程式碼,留到 2. 除了第一筆以外的情況)
那麼問題來了:第一個注入流動性的人要怎麼決定提供各自多少的兩種幣呢?最好的辦法是依照當時兩幣的市價比,讓兩者的價值 (數量 * 價格) 相同,例如:當 1 Ether 的價格為 100 Dai,注入 1 Ether 以及 100 Dai 是最好的,因為兩種幣的總價值是一樣的,以下舉例說明原因。
當 1 Ether 市價為 100 Dai 時,假設第一人決定注入 1 Ether 和 50 Dai (k = 50),總價值為 150 Dai,我們考慮兩種兌換方法:
Ether -> Dai:用 0.1 Ether 來購買 Dai,依照上方公式 (1+0.1)(50-y) = 50 可得 y ≒ 4.55,也就是說得到的價格是 0.1 Ether = 4.55 Dai,遠低於市價 0.1 Ether = 10 Dai,相信沒有人這麼傻~
Dai -> Ether:用 2 Dai 來購買 Ether,依照上方公式 (1-x)(50+2) = 50 可得 x ≒ 0.038,也就是說得到的價格是 2 Dai = 0.038 Ether,高於市價 2 Dai = 0.02 Ether,那麼眼尖的人就會立刻衝來套利了xD
那麼即使如此,第一人有所損失嗎?當然有!假設路人 A 手上有 30 Dai (= 0.3 Ether),A 看到機會後就把 30 Dai 全換成 Ether:(1-x)(50+30) = 50 可得 x = 0.375,大於原本持有的 Dai 的價值 0.3 Ether。此時,第一人即使立刻抽出現存的全部資金 Ether = 0.625 及 Dai = 80,總價值也只剩下 142.5 Dai,比起原本的 150 Dai 還少。以上的計算還有手續費沒有納入考量,但也只有 30 Dai 的 0.3% = 0.09 Dai。
由上例可知,第一位提供流動性的人為了避免自己的損失,確實得依照當時兩幣的市價比去提供相應的數量。傑克,這真是太神奇了0…0
2. 除了第一筆以外的情況
如果市場已經有流動性,使用 addLiquidity() 來注入流動性就會進入第 51 行的 if。
source: https://github.com/Uniswap/uniswap-v1/blob/master/contracts/uniswap_exchange.vy
(53行) eth_reserve: 由於使用者已經透過函式 addLiquidity() 將錢匯入了合約,因此將合約所擁有的 Ether 數量 self.balance (= x + ∆x) 減去使用者匯入的錢 msg.value (= ∆x),得到使用者匯錢之前合約內所擁有的 Ether 數量 (= x)
(54行) token_reserve: self.token 是一個餵入幣地址的 ERC20 instance;透過呼叫 ERC20 的函式 balanceOf() 即可查出合約所擁有的 Y 幣的數量 (= y)
(55行) token_amount: 透過將合約所擁有的 Y 幣的數量 token_reserve (= y) 乘上使用者匯入的錢 msg.value (= ∆x) 對合約原本擁有的Ether 數量 eth_reserve (= x) 的比例,代表使用者應該相應地注入多少 Y 幣 (∆y = y * ∆x / x)。除法一樣是無條件捨去
(56行) liquidity_minted: 將原本交易所中的總流動性 total_liquidity 乘上增加的比率 msg.value / eth_reserve (= ∆x / x) ,代表增加的流動性,隨後會在第 58 行記錄下來
(60行) transferFrom() 函式將使用者應付的 Y 幣數量 token_amount (= ∆y) 匯入當前合約,就完成了流動性的注入。小提示:智能合約中的 assert() 會確保函式內的條件如果失敗就整筆交易 transaction 直接取消,因此只要傳入的參數已經被計算好,於 60 行再進行 transferFrom() 其實與放在前面並沒有太大的差別
以上就是注入流動性的大致實作內容。取出資金 removeLiquidity() 其實與 addLiquidity() 的做法大同小異,因此就不再贅述。
四. 結語
呼,真的累。恆定乘積做市商模型的概念雖然簡單,但解釋起來還是挺複雜的!其實本文並未著墨於審計報告中的主要議題:評估因為整數除法 (不使用浮點數) 而造成的誤差範圍,因為講起來非常複雜、也不是真的這麼需要知道。不過,恰巧就是這些程式碼的細節有可能讓程式產生預期之外的結果!因此,對於有興趣了解該如何去分析智能合約整數除法的讀者,可以研究一下;而 Uniswap 的程式碼因為是用 Vyper 實作,可讀性非常高、同時也不難,因此也非常值得打開來看看、甚至動手實作自己的版本!
最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)
田少谷 Shao - Medium
Uniswap 解析:恆定乘積做市商模型 Constant Product Market Maker Model 的 Vyper 實作 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
python if 多行 在 吳老師教學部落格 Youtube 的最佳貼文
TQC+Python基礎程式語言應用班第1次上課(環境設定與基本語法)
01_問卷結果與懶人包
02_課程內容說明
03_建置Python開發環境與spyder設定
04_變數型態與轉型說明
05_存檔與邏輯判斷
06_邏輯判斷改為多重邏輯
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/tcfst_python_2020_2
TQC+基礎程式語言 (Python 3)證照
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elifPython 第3類:迴圈敘述
技能內容:while、for…inPython 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
上課用書:
Python 3.x 程式語言特訓教材(第二版)
作者: 蔡明志, 財團法人中華民國電腦技能基金會
出版社:全華
出版日期:2018/12/20
定價:490元
吳老師 110/8/3
EXCEL,VBA,Python,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
python if 多行 在 吳老師教學部落格 Youtube 的最佳貼文
TQC+Python基礎程式語言應用班第1次上課(環境設定與基本語法)
01_問卷結果與懶人包
02_課程內容說明
03_建置Python開發環境與spyder設定
04_變數型態與轉型說明
05_存檔與邏輯判斷
06_邏輯判斷改為多重邏輯
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/tcfst_python_2020_2
TQC+基礎程式語言 (Python 3)證照
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elifPython 第3類:迴圈敘述
技能內容:while、for…inPython 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
上課用書:
Python 3.x 程式語言特訓教材(第二版)
作者: 蔡明志, 財團法人中華民國電腦技能基金會
出版社:全華
出版日期:2018/12/20
定價:490元
吳老師 110/8/3
EXCEL,VBA,Python,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
python if 多行 在 吳老師教學部落格 Youtube 的最讚貼文
TQC+Python基礎程式語言應用班第1次上課(環境設定與基本語法)
01_問卷結果與懶人包
02_課程內容說明
03_建置Python開發環境與spyder設定
04_變數型態與轉型說明
05_存檔與邏輯判斷
06_邏輯判斷改為多重邏輯
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/tcfst_python_2020_2
TQC+基礎程式語言 (Python 3)證照
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elifPython 第3類:迴圈敘述
技能內容:while、for…inPython 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
上課用書:
Python 3.x 程式語言特訓教材(第二版)
作者: 蔡明志, 財團法人中華民國電腦技能基金會
出版社:全華
出版日期:2018/12/20
定價:490元
吳老師 110/8/3
EXCEL,VBA,Python,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
python if 多行 在 Python - 100天从新手到大师 - GitHub 的推薦與評價
Contribute to jackfrued/Python-100-Days development by creating an account on ... 编写多行代码/ 运行程序/ 退出IDLE; 注释- 注释的作用/ 单行注释/ 多行注释 ... ... <看更多>
python if 多行 在 Python 流程控制:if 判斷式By 彭彭 - YouTube 的推薦與評價
喜歡彭彭的教學影片嗎?點擊「加入」按紐取得更多會員服務哦。加入會員:https://www.youtube.com/channel/UCguZS-y7codLSt6vpkVdnKg/join1. if 判斷 ... ... <看更多>
python if 多行 在 Lesson 10 If-else 條件語法.ipynb - Python Basics - Google Colab 的推薦與評價
其中"判斷條件"成立時(非零),則執行後面的語句,而執行內容可以多行,以同樣的縮排來區分表示同一範圍。 else 爲可選語句,當上述條件不成立時執行 ... ... <看更多>