matlab解决线性规划,非线性规划,整形规划及代码
一.线性规划
1.1举例说明
形如上述这样的数学公式就叫线性规划
此时我们写出它的matlab代码
f=[-5,-4,-6];
a=[1,-1,1;3,2,4;,3,2,0];
b=[20;42;30];
lb=zeros(3,1);
[x,y]=linprog(f,a,b,[],[],lb)
Optimization terminated.
x =
0.0000
15.0000
3.0000
y =
-78.0000
再看一列:
f=[2,3,-5]
aeq=[1,1,1]
beq=7
a=[2,-5,1]
b=10
lb=zeros(3,1)
linprog(f,-a,-b,aeq,beq,lb)
ans =
3.0000
0.0000
4.0000
1.2函数总结:
linprog( c , A , b , Aeq , beq , lb , ub , x0 )
参数说明:
1.c是目标参数
2.A是不等式约束AX<=b的系数矩阵,
3.b是不等式约束AX<=b的常数项
4.Aeq是等式约束AeqX=beq的系数矩阵,
5.beq是等式约束AeqX=beq的常数项,
6.lb是X的下限,
7.ub是X的上限,
8.X是向量[x1,x2,…xn]即决策变量。
使用标准:(非线性和整形标准相同,目标函数必须是求最小值,约束函数必须是小于)
即.目标函数只能求最小值
约束不等式只能是<=
二.非线性规划
形如上述这样的就是非线性规划
function f=fun1(x)
f=x(1)^2+x(2)^2+8;
function [g,h]=fun2(x)
g=-x(1)^2+x(2);
h=-x(1)-x(2)^2+2;%约束等式
options=optimset;
[x,y]=fmincon('fun1',rand(2,1),[],[],[],[],zeros(2,1),[],'fun2',options)
x =
1.0000
1.0000
y =
10.0000
总结:
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
1.fun为目标函数
2.x0为初始值
3.A是不等式约束AX<=b的系数矩阵
4.b是不等式约束AX<=b的常数项
4.Aeq是等式约束AeqX=beq的系数矩阵,
5.beq是等式约束AeqX=beq的常数项,
6.lb是X的下限,
7.ub是X的上限,
8.nonlcon为非线性不等式约束
9.option为设置fmincon的参数
三.整形规划
总结:
f=[3,2];
a=[2,3;1,0.5]
b=[14;4.5]
lb=zeros(2,1)
[x,y,flag]=intlinprog(f,[1,2],a,b,[],[],lb)
x =
0
0
y =
0
flag =
1
x = linprog( c ,intcon, A , b , Aeq , beq , lb , ub , x0 )
1.c是目标参数
2.intcon是指点哪几个变量需要是整数
2.A是不等式约束AX<=b的系数矩阵,
3.b是不等式约束AX<=b的常数项
4.Aeq是等式约束AeqX=beq的系数矩阵,
5.beq是等式约束AeqX=beq的常数项,
6.lb是X的下限,
7.ub是X的上限,
8.X是向量[x1,x2,…xn]即决策变量。!]