1. 首页 > 科技

Matlab线性规划代码怎么敲? matlab线性规划最大值

Matlab线性规划代码怎么敲?matlab线性规划最大值

matlab求线性规划,程序怎么写

基本是利用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 0;2 0 0 1 0;3 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做线性规划

如果是线性的,拟合一下就可以了,使用命令polyfit。

>> a=[10/9 10/8 10/7 10/6 10/5 10/4 10/3];

>> b=[1000 950 900 850 800 700 590];

>> A=polyfit(a,b,1)

A =

1.0e+003 *

-0.1801 1.1691

即 y=-180.1*x+169.1

如果想知道中间点的值,可以使用命令polyval比如:

>> polyval(A,10/7)

ans =

911.8016

matlab 中如何求解线性规划问题

bintprog 求解0-1规划问题 格式如下

x = bintprog(f)

x = bintprog(f, A, b)

x = bintprog(f, A, b, Aeq, beq)

x = bintprog(f, A, b, Aeq, beq, x0)

x = bintprog(f, A, b, Aeq, Beq, x0, options)

[x, fval] = bintprog(...)

[x,fval, exitflag] = bintprog(...)

[x, fval, exitflag, output] = bintprog(...)

这里x是问题的解向量

f是由目标函数的系数构成的向量

A是一个矩阵,b是一个向量

A,b和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件

A,b是系数矩阵和右端向量。

Aeq和Beq表示了线性规划中等式约束条件中的系数矩阵和右端向量。

X0是给定的变量的初始值

options为控制规划过程的参数系列。

返回值中fval是优化结束后得到的目标函数值。

exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;

exitflag>0表示优化过程中变量收敛于解X,

exitflag<0表示计算不收敛。

output有3个分量,

iterations表示优化过程的迭代次数,

cgiterations表示PCG迭代次数,

algorithm表示优化所采用的运算规则。

在使用linprog()命令时,系统默认它的参数至少为1个,

但如果我们需要给定第6个参数,则第2、3、4、5个参数也必须给出,否则系统无法认定给出的是第6个参数。遇到无法给出时,则用空矩阵“[]”替代。

例如

max=193*x1+191*x2+187*x3+186*x4+180*x5+185*x6; %f由这里给出

st.

x5+x6>=1;

x3+x5>=1;

x1+x2<=1;

x2+x6<=1;

x4+x6<=1;

%a、b由不等关系给出,如没有不等关系,a、b取[]

x1+x2+x3+x4+x5+x6=1; %aep、bep由等式约束给出

代码如下

f=[-193;-191;-187;-186;-180;-185;];

a=[0 0 0 0 -1 -1;0 -1 0 0 -1 0;1 1 0 0 0 0;0 1 0 0 0 1;0 0 0 1 0 1];

b=[-1,-1,1,1,1]';

aeq=[1 1 1 1 1 1];

beq=[3];

x=bintprog(f,a,b,aeq,beq)

注意

目标值为最大值时应乘以-1化为求最小值;

不等约束为>=时应乘以-1化为<=;

linprog 非0-1规划 格式如下

x = linprog(f,A,b)

x = linprog(f,A,b,Aeq,beq)

x = linprog(f,A,b,Aeq,beq,lb,ub)

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)

x,fval] = linprog(...)

x,lambda,exitflag] = linprog(...)

[x,lambda,exitflag,output] = linprog(...)

[x,fval,exitflag,output,lambda] = linprog(...)

参数说明和使用格式同bintprog

LB和UB是约束变量的下界和上界向量

lambda有4个分量,

ineqlin是线性不等式约束条件,

eqlin是线性等式约束条件,

upper是变量的上界约束条件,

lower是变量的下界约束条件。

它们的返回值分别表示相应的约束条件在优化过程中是否有效。

求编程高手matlab解线性规划题,求代码

aeq=[ 1 1 0 0 0 0 0 0 0 0 0 0

0 0 1 1 0 0 0 0 0 0 0 0

0 0 0 0 1 1 0 0 0 0 0 0

0 0 0 0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 0 0 0 1 1];

beq=[2 5 4 7 6 11];

A=ones(1,12);b=40;

C=[100:100:1200];

vlb=zeros(1,12);

[x,fval]=linprog(C,A,b,aeq,beq,vlb)

>> [x,fval]=linprog(C,A,b,aeq,beq,vlb)

Optimization terminated.

x =

2.0000

0...aeq=[ 1 1 0 0 0 0 0 0 0 0 0 0

0 0 1 1 0 0 0 0 0 0 0 0

0 0 0 0 1 1 0 0 0 0 0 0

0 0 0 0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 0 1 1 0 0

0 0 0 0 0 0 0 0 0 0 1 1];

beq=[2 5 4 7 6 11];

A=ones(1,12);b=40;

C=[100:100:1200];

vlb=zeros(1,12);

[x,fval]=linprog(C,A,b,aeq,beq,vlb)

>> [x,fval]=linprog(C,A,b,aeq,beq,vlb)

Optimization terminated.

x =

2.0000

0.0000

5.0000

0.0000

4.0000

0.0000

7.0000

0.0000

6.0000

0.0000

11.0000

0.0000

fval =

2.6100e+004

但是若楼主没有要求 自变量的下限,就会导致下面的结果

>> [x,fval]=linprog(C,A,b,aeq,beq)

x =

1.0e+015 *

2.5332

-2.5332

0.9508

-0.9508

0.1530

-0.1530

0.0581

-0.0581

0.0306

-0.0306

0.0133

-0.0133

fval =

-3.7390e+017

希望对楼主有帮助,希望楼主采纳,欢迎交流。