如何使用Python-MIP解決優(yōu)化問題

      網(wǎng)友投稿 1441 2025-04-02

      MIP是基于Python的優(yōu)化問題建模package,全稱是Python- Mixed-Integer Linear Programming。MIP可以調(diào)用開源求解器CBC和商用求解器Gurobi。本質(zhì)上是一套優(yōu)化建模語言,將建立好的優(yōu)化模型轉(zhuǎn)化成計(jì)算機(jī)和求解器能看懂的形式。


      Package的主頁是https://pypi.org/project/mip/

      官方文檔和使用手冊看這里https://python-mip.readthedocs.io/en/latest/

      下面介紹一下如何安裝使用MIP建立優(yōu)化問題的模型,并如何求解。

      一、安裝

      安裝很簡單,命令是

      pip install mip

      如何使用Python-MIP解決優(yōu)化問題

      最新的版本是1.12.0,安裝時候可以指定版本

      pip install mip==1.12.0

      MIP的開發(fā)比較活躍,隔幾個月就會有新版本發(fā)布。在升級的時候一定要注意,千萬不要

      pip install mip

      而應(yīng)該指定更高的版本號,例如

      pip install mip==1.12.0

      二、如何建模

      首先導(dǎo)入MIP

      from mip import *

      初始化一個模型

      m = Model(solver_name=CBC)

      注意,如果不指定求解器,默認(rèn)是Gurobi。CBC是開源求解器,可以免費(fèi)試用。

      增加變量

      x = m.add_var()

      通常我們會加入很多相似變量,比如x_ij,這個時候可以使用dict() 去存儲變量,便于后續(xù)檢索。例如可以這樣,把變量名字當(dāng)做字典的key

      x = {}

      for i in [1, 2, 3]:

      x[i] = m.add_var(name=’x’+str(i))

      注意,這樣做以后,字典里的value是MIP的variable class。并且建議增加變量的時候加上name,便于以后檢索。

      如果有變量的name,也可以這樣得到變量本身

      var = m.var_by_name(var_name)

      增加約束條件

      可以這樣:

      m += x + y <= 10

      也可以這樣

      m.add_constr(x + y <= 10)

      這里也建議給每個constr起個名字。也可以設(shè)置一個字典去存儲所有約束條件。

      這里有一個很有用的函數(shù)xsum(),用于求和,比如

      m += xsum(w[i]*x[i] for i in range(n) if i%2 == 0) <= c

      增加目標(biāo)函數(shù)

      默認(rèn)是minimize,也可以設(shè)置maximize

      m.objective = minimize(xsum(c[i]*x[i] for i in range(n)))

      m.objective = maximize(xsum(c[i]*x[i] for i in range(n)))

      存儲模型

      強(qiáng)調(diào)一下MIP是一個很好的優(yōu)化建模工具。模型建立好以后不需要一定用CBC或者Gurobi求解。如果想用別的求解器,可以先把建立好的模型轉(zhuǎn)成mps格式或者lp格式。

      m.write('model.lp')

      m.write('model.mps')

      多數(shù)求解器都可以讀lp文件和mps文件,然后去求解。

      求解

      m.optimize()

      返回的是優(yōu)化模型狀態(tài)model status,是MIP的另外一個class,OptimizationStatus。

      如何想知道某個變量的最優(yōu)值,可以用x這個屬性,比如

      Var.x

      想知道優(yōu)化目標(biāo)函數(shù)可以這樣

      m.objective_value

      CBC有時候會返回多個最優(yōu)值,

      m.objective_values

      這里是MIP的基本功能,掌握以后可以解決大部分優(yōu)化模型的建立問題。語法容易上手,和Gurobi非常相似,如果沒有Gurobi許可證,MIP是個很好的替代。

      EI智能體 運(yùn)籌優(yōu)化 EI創(chuàng)新孵化Lab EI企業(yè)智能

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:創(chuàng)建分級顯示(自動創(chuàng)建分級顯示)
      下一篇:生產(chǎn)出口退稅申報系統(tǒng)(生產(chǎn)出口退稅申報系統(tǒng)怎么操作)
      相關(guān)文章
      亚洲香蕉在线观看| 亚洲av永久综合在线观看尤物| 豆国产96在线|亚洲| 亚洲一区二区三区丝袜| 91亚洲国产成人久久精品| 亚洲资源在线视频| 亚洲高清无在码在线无弹窗| 亚洲精品视频在线观看视频| 亚洲精品在线网站| 亚洲手机中文字幕| 亚洲免费在线观看视频| 国产精品高清视亚洲精品| 亚洲一区二区无码偷拍| 亚洲国产成人久久精品软件 | www.亚洲精品.com| 亚洲国产精品成人AV无码久久综合影院 | 亚洲欧美第一成人网站7777| 亚洲国产精品成人AV在线| 国产精品亚洲天堂| 国产成人精品曰本亚洲79ren| 一本色道久久综合亚洲精品高清 | 亚洲字幕AV一区二区三区四区 | 鲁死你资源站亚洲av| 亚洲国产婷婷综合在线精品 | 国产亚洲精品福利在线无卡一| 国产精品亚洲αv天堂无码| 国产亚洲自拍一区| 久久亚洲精品成人| 久久综合亚洲鲁鲁五月天| 麻豆狠色伊人亚洲综合网站| 亚洲av无码成人精品国产| 国产a v无码专区亚洲av | 亚洲av永久无码| 亚洲精品成a人在线观看| 亚洲国产精品lv| 亚洲午夜一区二区电影院| 在线a亚洲老鸭窝天堂av高清| 国产91成人精品亚洲精品| 亚洲色欲色欲www在线丝| 亚洲伊人久久大香线蕉苏妲己| 亚洲冬月枫中文字幕在线看|