主頁 >  其他 > 深入淺出列生成演算法

深入淺出列生成演算法

2020-09-11 18:50:45 其他

本文盡量避免數學公式,使用文字解釋列生成演算法的原理,爭取讓讀者能形成直觀上的理解,

為什么需要了解列生成演算法的原理

  1. 列生成演算法無法簡單地呼叫第三方庫來使用,必須根據具體問題,構造不同的演算法模型,
  2. 只有了解了原理,才能在踩到各種坑時,有所針對地去優化各種細節,不然只能抓瞎或者抓腮,

列生成演算法原理

列生成演算法可以從兩個視角來理解:對偶角度和單純形演算法角度,

對偶角度

啥是對偶

這里簡單過一下對偶的概念,

假設有個長得很標準的線性規劃問題:

那么,它的對偶問題為:

下面我們都以這個問題來討論,即說到原問題時,默認是一個最小化問題;說到對偶問題時,默認是一個最大化問題,

怎么理解這個對偶關系呢?借用經濟學方面的話來說,假設原問題的目標是讓成本最小,那么對偶就是讓收入最大,更確切地講,是:

  • 原問題丶:保證收入不低于某個值的條件下,使成本最小化,
  • 對偶問題:保證成本不高于某個值的條件下,使收入最大化,

那個丶純粹是為了對齊,忽略之……

可以看到,原問題和對偶問題其實就是一個問題:目標凈收益最大,只是一個是約束收入優化成本,一個是約束成本優化收入,角度不同而已,體現在公式上,就是原問題的變數對應對偶問題的約束,目標系數對應約束邊界,約束矩陣倒轉過來

另外,關于對偶,一個比較重要的特性是:原問題的最優值與對偶問題的最優值相等

從對偶角度看列生成演算法

列生成演算法主要用途在于求解變數多,但是大部分變數將會取值為0的線性規劃問題,總體思路是先忽略大部分變數,構造一個只使用小部分變數的模型(其余變數相當于值為0),這樣就能很快求出一個解,然后尋找模型外的變數,找到能夠讓目標值更優的變數,加入模型再次求解,重復這個程序直至找不到更好的變數,

這個程序的關鍵問題在于,怎么評估模型外的變數是否能讓目標值更優,

我們從對偶的角度來研究這個問題,

原問題的變數對應對偶問題的約束,所以原問題新增變數,相當于對偶問題新增約束,

原問題新增變數 -> 對偶問題新增約束

由于對偶問題是個最大化問題,所以對偶問題新增約束后,顯然最優值不變或變差,也就是不變或變小,從常理上看,約束越多,最優值越差嘛,

而前面提到的,原問題的最優值等于對偶問題的最優值,也就是說,如果對偶問題最優值不變,那么原問題最優值也不變;如果對偶問題最優值變小,那么原問題最優值也變小,而我們需要的正是讓原問題的最優值變小,

所以問題變為如何盡量避免新增的約束沒有改變最優值,設想一下,當加入新約束時,如果當前對偶的最優解沒有違反新的約束,那么這個解仍然會是新增約束后的對偶問題的最優解,最優值將不變,

因此,我們要找的新增的約束,要和當前最優解沖突

整條邏輯鏈為:

新增變數后原問題最優解變小 -> 新增約束后對偶問題最優解變小 -> 新增約束前的最優解不在新增約束后的可行域 -> 新增約束前的最優解不滿足新增的約束

一行對偶問題的約束的公式為:

假設最優解為w*,那么違反約束的條件為:

變換一下,變成:

左側的式子,叫做的reduced cost,也叫做檢驗數

通過分析,我們知道,只要加入reduced cost小于0的對偶約束(從而加入了原問題對應的變數)即可

很自然的想法是,我們更傾向于找到reduced cost最小的一個或幾個變數加入,也就是最好能找到最小化reduced cost的新約束:

這里就出現了一個新的最優化問題,這個問題叫做列生成的子問題(sub problem),其中w*是已知的,未知量是c和a,c和a是和問題的應用場景有關的,需要根據實際場景來構造c和a的約束條件,所以子問題無法通用地求解,只能根據具體問題選擇不同的方法求解,

當所有未加入模型的變數的reduced cost都大于等于0時,目標值無法再優化,說明我們已得到最優解,

另外,熟悉對偶問題經濟學含義的同學會知道,reduced cost是指產品的差額成本,那么顯然要新增的是差額成本為負的產品了,這是另一種理解列生成的思路,

單純形演算法角度

對偶角度給出了一個偏感性的方式來理解列生成演算法,換個視角,從單純形演算法角度上看,則是單純形演算法本身,為了更高效地求解包含大量變數的問題,自然地擴展為列生成演算法,

相信有不少人被單純形演算法虐得有心理陰影——公式復雜,手工計算量也巨大……

其實,如果我們先不看細節,單純形的核心原理并沒有那么難以理解,下面講解時不會很嚴謹,理解演算法框架就夠了,嚴謹的程序請參閱運籌學相關書籍,

單純形演算法

眾所周知,單純形演算法有一個幾何上的解釋:

  • 線性規劃是一個凸優化問題,區域最優解就是全域最優解,
  • 線性規劃的解空間是一個n維的凸多面體,最優解在這個凸多面體的某個頂點上,
  • 單純形演算法從一個初始頂點開始,不斷沿著鄰邊找更好的頂點,
  • 當一個頂點四周沒有更好的頂點時,這個頂點就是最優解,

整個程序就像水沿著一條蜿蜒的溝渠流下,最侄訓聚到最低點一樣,

問題是,這里面的幾何概念和代數公式怎么對應?

這里用不嚴謹(但更容易理解)的語言說明一下:

  • 邊界:解空間是由不等式約束(包括變數非負這些約束)圍起來的一塊空間區域,當點p使得若干個不等式取等號時,那么點p就在約束邊界的超平面上,這個邊界可能是一個面、邊、頂點,
  • 頂點:頂點會讓盡量多的約束取等號,也就是說,頂點是由若干個改為等號的約束組成的方程組的解,我們叫這個方程組為約束邊界方程組
  • 沿著邊:約束邊界方程組去掉一個方程,其解集就變成與頂點鄰接的一條邊,再取一條原方程組外的約束條件加入,所得到的解就是相鄰的頂點,簡單說,就是約束邊界方程組中替換掉一個方程,形成的新方程組解出來就是相鄰的頂點,

這里涉及到通過讓約束取等號來求邊界的操作,而不等式亂糟糟地混在方程型的約束和變數非負約束里,會使這里的分析比較困難,所以使用單純形演算法之前,都會通過引入松弛變數、剩余變數和人工變數等方法(這一步在這里不重要,不詳細展開了),將線性規劃轉換成如下標準形式:

標準形式中只有變數非負約束包含不等式,其他約束都是等式,這樣我們就可以很容易地做邊界相關的計算了,假設變數數量為n,等式約束數量為m,通過轉換而來的標準形式都會有n > m,那么,我們知道,只要讓n-m個變數等于0,剩下的m個變數就可以通過這m個等式聯立方程組(約束邊界方程組)求出一個解(簡單起見,不考慮無解,無數解這些邊緣條件),這個解就是一個頂點,

這里約束邊界方程組中的m個變數叫作基變數,固定值為0的n-m個變數叫作非基變數

沿著邊找相鄰頂點,就是取一個被固定為0的非負約束,也就是一個非基變數(這個操作叫入基),替換掉一個基變數(這個操作叫出基,這個變數出基后就固定值為0),然后重新求解一個頂點,

入基操作需要選擇入基變數,選擇的依據是這個變數在目標函式中的下降速度,也就是這個變數增加1時,目標值減少多少,經過推導可知,下降速度的計算公式剛好是檢驗數(reduced cost),這里就和對偶的視角聯系起來了,

出基操作這里就不細說了,大致的思路是在約束條件下,舊的基變數有一部分會隨著入基變數的增長而下降,其中最先下降到0的舊的基變數就會被選為出基變數,

整個單純形演算法的計算步驟是:

  1. 選取基變數和非基變數,簡單能出初始解就好,
  2. 計算所有非基變數的reduced cost,找到最小且為負值的那個作為入基變數,如果reduced cost都大于等于0,迭代終止,
  3. 選出基變數
  4. 解約束邊界方程組,回到步驟2

從單純形演算法角度看列生成演算法

在單純形的步驟2,需要計算所有非基變數的RC,找到最小的那個,當變數個數很多的時候,這一步就成為了演算法運行時間瓶頸,

在一些情況下,通過巧妙構造問題,可以讓這一步不需要遍歷所有變數,甚至我們都不需要知道有多少變數,只要能在每次迭代的時候生成一個或者多個變數,提升優化效果就可以了,

由于不需要遍歷所有變數,所以一開始就不需要使用所有變數,只需要使用一組能產生初始解的初始變數構成線性優化問題即可,這種只使用部分變數的模型被稱為原問題的restricted master problem(RMP)

每次迭代時,生成一個或多個讓reduced cost最小的變數加入RMP,這個生成步驟就是求解子問題,不斷加入新變數直到沒有小于0的reduced cost的變數時就達到最優解,

到這里就和對偶角度分析的結果一致了,

下面是單純形演算法與列生成演算法簡要流程圖的對比,可以看到,兩者的結構是一樣的,

一般來說,我們不會手搓單純形演算法,所以正常都是直接呼叫單純形演算法庫解RMP,然后做列生成,再跑RMP,直到達到最優,

一個經典例子:Cutting Stock Problem

這是一個列生成演算法的經典例子,

原紙卷每個長17m,顧客們分別需要25個3m長,20個5m長,18個7m長的紙卷,
問:如何切割使消耗的原紙卷數量最少?

令一個原紙卷的切割方案集合為:

P = {(a, b, c) | 3a + 5b + 7c <= 17}

其中,a是一個原紙卷切割出的3m紙卷數量,b是5m紙卷數量,c是7m紙卷數量,

我們用變數x(abc)表示使用切割方案(a, b, c)的原紙卷數量,

顯然,一個變數與一個原紙卷切割方案一一對應,建模如下:

這里故意不適用傳統的下標序號標記,意在突出我們不需要對變數編號,只需要知道變數在對應在什么集合上,如何通過集合中的元素生成變數就行了,

初始解很好找,比如說我們可以取25個原紙卷按照方案(1, 0, 0)切割,20個原紙卷按照方案(0, 1, 0)切割,18個原紙卷按照方案(0, 0, 1)切割,這當然會有很多浪費,但是初始解可行就可以了,浪費的部分會在下面的迭代中優化掉,

接下來要生成變數,變數與切割方案一一對應的,所以是要找出一個切割方案(a, b, c),使得reduced cost最小,

其中w1、w2和w3分別為約束R1、R2和R3的對偶值,

約束條件除了a、b、c非負外,還需要滿足切割后的紙卷長度綜合小于或者等于原紙卷的長度,

這樣子問題就構造好了,求解子問題得到新增變數,然后迭代直到最優,具體計算這里不展開了,

整數規劃求解

前面提到的單純形演算法和列生成演算法求解的都是線性規劃,在實際應用中,一般還會需要求解整數規劃,也就是變數都約束為整數的線性規劃,

這里先提一個概念:整數規劃的線性松弛,整數規劃問題,不考慮整數約束,剩下的約束條件和目標組成的線性規劃問題,

其實我們并沒有很好的方法直接求解整數規劃,通常都是不斷地調整并求解線性松弛,最后找到最優整數解,

分支定界

分支定界是一個用來求整數優化問題的框架,其實思路很簡單,就是采用類似二分法的技巧,在線性解空間中暴力搜索整數解,

首先,求解線性松弛得到線性解,取一個變數x進行分支,比如x線性解值為1.2,那么產生 x <= 1 和 x >= 2 兩個分支,將這兩個條件分別加入到線性松弛,得到兩個線性規劃,再求解這兩個線性規劃,兩個又分別分支……直到求得最優解,

有些情況下判斷一個解是否為最優解是有方法的,所以不用搜索所有分支,但是,分支定界在最壞情況下的時間復雜度仍是指數級,為了防止運行時間過長,一般使用分支定界時還會額外加一些終止條件,比如回溯次數限制、運行時間限制、找到第一個整數解就結束等,

分支定價

分支定價就是在分支定界框架中,使用列生成演算法來求解每個分支節點的演算法,

不過這里,除了根節點,其他節點不用從頭開始生成新變數,繼承父節點用到的變數即可,這樣可以節省很多重復生成變數的程序,

在01整數規劃中,還有更簡化的方法,每次列生成得到線性松弛的最優解后,找出值最接近1的變數,新加這些變數等于1的約束,繼續跑列生成,直到找出所以值為1的變數,剩下的自然都是0了,這個方法可以加入回溯,也可以不回溯,出現無解就直接結束……據說不回溯也很少出現無解的情況,

一些相關問題

退化問題/類退化問題

通過RC找的新變數不一定能讓目標值變得更好,仍然存在不變的可能,極小概率的情況下,單純形演算法可能會有入基變數和出基變數回圈出現的情況,由于我們肯定是呼叫線性規劃庫來跑單純形的,所以不用考慮這個……

列生成沒有出基操作,不會出現回圈,但是有一些改進會剔除冗余變數,這時就會有極小概率會出現回圈了,這種情況不需要費心去處理,玄學調參降低出現概率,并設定最大迭代次數等強制終止條件,確保能終止就好,

最惡心的情況是沒有回圈,但是長時間沒有提升目標值的情況,這其實是演算法卡在一個拐點上了,只要過了拐點就能開始提升,特別是在一些約束較強的問題(比如密集的排班問題)中,使用某些啟發式演算法或者手工做出來的初始解就很容易出現這種情況,

而我們為了避免演算法跑太久,通常會設定多次迭代沒有提升就結束的條件,這可能使演算法從拐點出發后,幾次迭代無優化就直接結束了,

這種情況無法完美解決,簡單的就是調參加更巧妙地設定結束條件,通過多次試驗盡量讓演算法能跨過這個拐點,還有另一個技巧是可以適當地給約束邊界加一下噪音,比如說小于等于1的約束,可以放寬到小于等于1.0001,這樣從初始解出發迭代時,由于邊界寬松了一些,變數可以有些許變化,會讓目標值有一些微小的提升,幫助判斷是否需要結束迭代,

CPLEX計算reduced cost的問題

使用CPLEX時,我們可以很方便的設定變數的上下界,比如設定 0 <= x <= 1,這時,x <= 1這部分是會影響reduced cost的值的,而CPLEX介面計算的是沒有考慮這個條件的……所以可能你自己手搓代碼出來reduced cost和CPLEX介面出來的reduced cost不相等,

更嚴重的是,可能你會忘了 x <= 1 這個條件,導致列生成的程序中算錯reduced cost,

這個問題其實影響不大,主要是會干擾一些計算程序正確性的驗算,

如何驗證子問題有沒有嚴重問題

沒有做分支操作時,線性松弛的目標值如果變差,說明子問題可能出現了一些很蠢的問題,

線性規劃求解演算法選擇

每次迭代求解線性規劃時,選用不同的演算法會影響求解時間,根據經驗:

  • 增加少量列時(列生成),使用單純形演算法(Primal),
  • 增加少量約束時(分支),使用對偶單純形演算法(Dual),
  • 其他情況,酌情使用對偶單純形演算法或者內點法,通過試驗決定,
    • 對偶單純形演算法快的時候很快,慢的時候很慢,
    • 內點法速度比較穩定,

以上也并不是所有場景通用的,應當針對具體問題,反復試驗來確定使用什么演算法,

迭代中剔除冗余變數

Reduced cost可以用來評估變數的“有用”程度,越小表示變數越有用,越大表示變數越無關緊要,

列生成迭代次數較多后,變數數量會越來越多,從而每次迭代的運行速度越來越低,可以設定一個變數規模上限,當變數數量大于上限時,從模型中去掉reduced cost最大的那些變數,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6724.html

標籤:其他

上一篇:0705. Design HashSet (E)

下一篇:Educational Codeforces Round 92 (Rated for Div. 2) A~D

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more