日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

整数线性规划算法

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整数线性规划算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、整數線性規劃基礎

二、常用求解方法:

1. 割平面法、

2. 分支定界法

  • 對于不滿足約束或者小于下屆的分支還需要進行剪枝操作。

3. 隱枚舉法

三、算例及實現代碼

3.1 整數線性規劃常見的第三方庫和軟件(截圖來自B站)

(1) 軟件:Excel, Lingo和matlab

(2) 第三方庫

補充:

  • pulp: Lp models
  • OpenOpt: Lp models, non-LP models

3.2 這里我們先學習使用pulp求解器來求解一個問題

3.2.1 基于anaconda的pulp安裝

3.2.2 求解一個算例,來自B站

  • 算例描述
    某公司生產三種油漆(interior, exterior, theme),油漆的原材料來源為M1和M2, 現在M1和M2分別只剩10噸和5噸了,三種油漆每噸的利潤分別是:1k,2k和3k,三種油漆每生產一噸需要的原材料重量如下表所示,要求如何分配原材料的配置,使得利潤最大化,注意這里并不是整數線性規劃問題,原材料的分配可以為小數。
  • 數學模型
(1) 變量
變量名含義
x1interior產量
x2exterior產量
x3theme產量
(2) 目標函數
const_function=1000?x1+2000?x2+3000?x3const\_function=1000*x1+2000*x2+3000*x3const_function=1000?x1+2000?x2+3000?x3(1)
(3) 約束
x1+x2?2+x3?3<=10x1+x2*2+x3*3<=10x1+x2?2+x3?3<=10(2)
x1?0+x2+x3?2<=5x1*0+x2+x3*2<=5x1?0+x2+x3?2<=5(3)
x1,x2,x3>=0x1,x2,x3>=0x1,x2,x3>=0(4)
  • 代碼實現
from pulp import * prob=LpProblem("my_prob",LpMaximize)x1=LpVariable("x1",0,None,LpContinuous) x2=LpVariable("x2",0,None,LpContinuous) x3=LpVariable("x3",0,None,LpContinuous)prob+=1000*x1+2000*x2+3000*x3prob+=x1+x2*2+3*x3<=10 prob+=0*x1+x2+x3*2<=5prob.writeLP("my_prob.lp")prob.solve() print("status: ",LpStatus[prob.status]) for v in prob.variables():print(v.name," = ",v.varValue,"\n") print(value(prob.objective))

輸出
status: Optimal
x1 = 2.5
x2 = 0.0
x3 = 2.5
10000.0

3.3 pulp進階:新增函數

  • 還是上一節的問題,但是變量定義方式變了
    利用LpVariable.dicts(name, indexs,lowBound=None,upBound=None, cat='Continuous',indexStart=[])用來構造變量字典,可以不需要一個個創建Lp變量實例,name指定所有變量前綴,index是列表,其元素會被用來構造變量名,后面三個參數和LpVariable一樣。
  • lpSum(vector) 計算一個序列的值,使用lpSum求解比普通sum函數快。
LpVariable from pulp import * paints={"interior","exterior","theme"} profit={"interior":1e3,"exterior":2e3,"theme":3e3 } M1={"interior":1,"exterior":2,"theme":3 } M2={"interior":0,"exterior":1,"theme":2 } prob=LpProblem("my_prob",LpMaximize) var=LpVariable.dicts("paint",paints,0,None,LpContinuous)prob+=lpSum([profit[i]*var[i] for i in paints])prob+=lpSum([M1[i]*var[i] for i in paints])<=10 prob+=lpSum([M2[i]*var[i] for i in paints])<=5prob.writeLP("my_prob.lp")prob.solve() print("status: ",LpStatus[prob.status]) for v in prob.variables():print(v.name," = ",v.varValue,"\n") print(value(prob.objective))

輸出
status: Optimal
paint_exterior = 0.0
paint_interior = 2.5
paint_theme = 2.5
10000.0

注意這一次的輸出變量名和第一次輸出的變量名有所區別,這里的變量名是庫自己生成的。

總結

以上是生活随笔為你收集整理的整数线性规划算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。