單純形法 拉格朗日乘子法

2021-10-05 08:51:14 字數 2219 閱讀 3149

單純形法的概念:

單純形法 ******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 ...