用Matlab解决线性规划问题程序怎么写

用Matlab解决线性规划问题程序怎么写,第1张

基本是利用linprog函数,简单给你介绍一下这个函数:

首先将线性规划问题化为标准型:

min z=cx

s.t. A1x<=b1 A2x=b2 v1<=x<=v2

然后利用指令[x,fv,ef,out,lambda]=linprog(c,A1,b1,A2,b2,v1,v2,x0,opt)

即可。不需要设置的部分可以省略。

针对你的问题,对应标准型的矩阵设置为:

z=-[2 5 0 0 0]

%A1和b1不需要设置

A2=[1 0 1 0 02 0 0 1 03 2 0 0 1]

b2=[4 12 18]

v1=[0 0 0 0 0]

%v2设置的大一点就行

v2=[1e10 1e10 1e10 1e10 1e10]

取初值,比如x0=[0 0 0 0 0]

然后[x,fv,ef,out,lambda]=linprog(c,[],[],A2,b2,v1,v2,x0,[])

就行了。

我临时编的,没编译,有问题直接告诉我就行。。。

有两个问题,第一个,你的问题里要求最大值,但是标准型是求取最小值,所以把c向量取你题中的相反数,这样得到的最优解不变,但是结果目标函数要变成相反数。

求这个线性规划问题,可以用matlab的最小值函数fmincon。fmincon极小值函数适应用于求约束非线性多变量函数的最小值。该问题求解方法如下:

1、建立目标函数,即

z=80*x11+90*x12+75*x13+60*x21+85*x22+95*x23+92*x31+80*x32+110*x33

2、建立约束函数,即

ceq(1)=100-(x11+x12+x13)

ceq(2)=170-(x21+x22+x23)

ceq(3)=200-(x31+x32+x33)

ceq(4)=120-(x11+x21+x31)

ceq(5)=170-(x12+x22+x32)

ceq(6)=180-(x13+x23+x33)

3、用fmincon函数求解,即

x0=zeros(1,9)

A=[]b=[ ]

Aeq=[]beq=[]

lb=zeros(1,9)ub=[]

[x,fval,exitflag]=fmincon(@(x)myfunc(x),x0,A,b,Aeq,beq,lb,ub,@(x)myconc(x))

4、求解结果

原因说的很清楚了,A的行数应该与b的长度相同。

b=[k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k]'

改成

b=[k,k,k,k,k,k,k,k,k,k,k,k,k,k,k]'


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7836128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存