1、python中的scipy中提供了線性規劃模組
1)模組匯入
from scipy import optimize
optimize.linprog
2)模組特點說明
需要注意的是這個模組只能找到線性規劃的最小值,因此,如果約束條件的不等式(變數除外)中含有「大於等於」的需要修改為「小於等於」,例如:x+y>=5,轉換為-x-y<=-5;
最大化max_z=x+y,轉換為最小化min_z=-x-y
最後linprog得到的是最小值,新增負號則變為最大值
2、**如下:
import numpy as np
from scipy import optimize
def line_progress():
# max z=x+y
# subject to :
# (1)2y+x<=6
# (2)y+2x<=6
# (3)x>=0,y>=0
# 最大值是(1)和(2)的交點,max:z=2+2=4
# z=x+y : 最大化係數max_coe_z=[1,1]轉化成最小化係數min_coe_z=-[1,1],新增負值
min_coe_z = - np.array([1, 1])
# 不等式中的係數(the coefficient of subject to in the inequality)
coe_st_ub = np.array([[2, 1], [1, 2]])
# 不等式中約束值(the value of subject to in the inequality)
value_st_ub = np.array([6, 6])
# 不等式中的變數(constrained variables of inequality)
var1_st, var2_st = (0, none), (0, none)
# 優化的結果(the result of optimize)
line_result = optimize.linprog(min_coe_z, a_ub=coe_st_ub, b_ub=value_st_ub, bounds=(var1_st, var2_st))
# 如果找到最小值輸出最小值,返回true
if line_result.success:
# 最小值的變數
print("線性規劃最小值的變數:")
print(line_result.x)
# 最小值
print("線性規劃最小值:")
print(line_result.fun)
# 最大值
print("線性規劃最大值:")
print(-line_result.fun)
else:
print("找不到線性規劃最小值。")
if __name__ == '__main__':
line_progress()
線性可分SVM中線性規劃問題的化簡
在網上找了許多關於線性可分svm化簡的過程,但似乎都不是很詳細,所以憑藉自己的理解去詳解了一下。線性可分svm的目標是求得乙個超平面 其實就是求w和b 在其在對目標樣本的劃分正確的基礎上,使得到該超平面最近的樣本的幾何間隔最遠。寫成線性規劃問題即為 其中 為最近點到超平面的幾何間隔,特別的間隔 w ...
python求解線性規劃問題
最近在做最優化的作業,涉及到線性規劃問題,之前運籌學也學過相關問題,都是通過手寫單純性表來進行求解的,但學了python之後感覺太麻煩了,不如利用python來幫我們求解。線性規劃求解主要弄清楚兩個部分,目標函式 max,min 和約束條件 s.t.我們求解時一般要化為python的標準形式 在此用...
線性規劃求解路徑問題
給定乙個帶權重的有向圖g v,e v為頂點集,e為有向邊集,每一條有向邊均有乙個權重。對於給定的頂點s t,以及v的子集v 尋找從s到t的不成環有向路徑p,使得p經過v 中所有的頂點 對經過v 中節點的順序不做要求 記邊的變數為ei 對應權重為ci 點記為vi 其出邊記為vo ji,其入邊記為vi ...