單純形法的概念:
單純形法 ******x method 求解線性規劃問題的通用方法。單純形是美國數學家g.b.丹齊克於2023年首先提出來的。它的理論根據是:線性規劃問題的可行域是 n維向量空間rn中的多面凸集,其最優值如果存在必在該凸集的某頂點處達到。頂點所對應的可行解稱為基本可行解。
單純形法的基本思想是:先找出乙個基本可行解,對它進行鑑別,看是否是最優解;若不是,則按照一定法則轉換到另一改進的基本可行解,再鑑別;若仍不是,則再轉換,按此重複進行。因基本可行解的個數有限,故經有限次轉換必能得出問題的最優解。
建立了danchun.txt,如下:
**:
import numpy as np
def pivot(d,bn):
l = list(d[0][:-2])
jnum = l.index(max(l)) #轉入編號
m =
for i in range(bn):
if d[i][jnum] == 0:
else:
inum = m.index(min([x for x in m[1:] if x!=0])) #轉出下標
s[inum-1] = jnum
r = d[inum][jnum]
d[inum] /= r
for i in [x for x in range(bn) if x !=inum]:
r = d[i][jnum]
d[i] -= r * d[inum]
def solve(d,bn):
flag = true
while flag:
if max(list(d[0][:-1])) <= 0: #直至所有係數小於等於0
flag = false
else:
pivot(d,bn)
def printsol(d,cn):
for i in range(cn - 1):
if i in s:
print("x"+str(i)+"=%.2f" % d[s.index(i)+1][-1])
else:
print("x"+str(i)+"=0.00")
print("objective is %.2f"%(-d[0][-1]))
d = np.loadtxt("d:\\danchun.txt", dtype=np.float)
(bn,cn) = d.shape
s = list(range(cn-bn,cn-1)) #基變數列表
solve(d,bn)
printsol(d,cn)
執行結果:
上圖中,x2、x3、x4對應引入的變數 s1、s2、s3
**:
from sympy import *
x1 = symbols("x1")
x2 = symbols("x2")
alpha1 = symbols("alpha1")
alpha2 = symbols("alpha2")
alpha3 = symbols("alpha3")
l = 50 *x1-100*x2 + alpha1 * (x1+ x2-300) +alpha2 *(2*x1 + x2-400)
difyl_x1 = diff(l, x1) #對變數x1求導
difyl_x2 = diff(l, x2) #對變數x2求導
difyl_alpha2 = diff(l, alpha2) #對乘子alpha2求導
dualcpt =alpha1 * (x1+ x2-300)
aa = solve([difyl_x1, difyl_x2, dualcpt,difyl_alpha2], [x1, x2,alpha1,alpha2])
for i in aa:
if i[2] >= 0 and i[0]>=0 and i[1]>=0:
if (i[0]+i[1]-300) <= 0 and (2*i[0]+i[1]-400) <= 0 and (i[0]-250)<=0:
print(i)
單純形法簡介
考慮目標函式,ma xz 3 x1 4 x2增加x1 和x2 的值都將改進 z 的值,單純形法的設計要求每次都選擇使 z值有最大改善的那個變數。意味著在上述目標函式中,首先選擇增加x2 的值。通過對問題約束施加以下兩項要求來方便單純形法的計算 1.所有的約束都是等式,並且具有非負右端項 2.所有變數...
單純形法中大m法 單純形法(大M法)
function x,fval,flag,iteration original m c,a,b 原始單純形法 大m法,無需給出初始基變數 programmed by liyang faruto s studio bnu math last modified 2008.4.27 求解標準型線性規劃 m...
C語言實現單純形法與對偶單純形法
某次為了完成課程要求所做 單純形法 如下,使用方法修改二位陣列a ip jp include define ip 3 define jp 7 int i,j,m,n,flag 1 float max 1 min 1000 guiyi float c jp 1 float a ip jp float ...