(一)MATLAB规划

目录

一、概念

(1)建立线性规划模型的一般步骤

(2)举例代码如下:

二、整数规划

(1)重点:travel salesman problem

(2)相互排斥的约束条件

(3)代码实现

三、非线性规划

 (1)一般非线性规划

(2)二次规划


一、概念

(1)建立线性规划模型的一般步骤

        1.分析问题,找出决策变量。

        2.根据问题,找出决策变量需要满足的线性等式或不等式条件。

        3.根据问题目标,构造关于决策变量的一个线性函数,即目标函数。

        4.编程求解

eg:

(一)MATLAB规划_第1张图片

(2)举例代码如下:

clc,clear
prob=optimproblem('ObjectiveSense','max')      %目标函数最大化的优化问题
c = [4;3]; b=[10;8;7];     
a=[2,1;1,1;0,1];
x=optiimvar('x',2,'LowerBound',0);          %决策变量
prob.Objective=c'*x;                        %目标函数                      
prob.Constraints.con=a*b<=b;                %约束条件
[sol,fval,flag,out]=solve(prob)             %fval返回最优值
sol.x                                       %显示决策变量的值
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
Aeq,beq是对应等式约束 Ax=b;lb和ub表示变量x的下界和上界;
x0是x的初始值;   options是控制参数

注意linprog只能默认求最小值,如果要求最大值需要是F=-f,,最后使max=-fval

二、整数规划

  整数规划表示:

1.纯整数规划。决策变量都必须是整数的规划模型

2.混合整数规划,决策变量中只需一部分取整数

3.0-1规划,决策变量只能是0或者1的规划。

如:背包问题、指派问题。

(1)重点:travel salesman problem

        题目参考p21

要点简记:

1.定义每一个城市为v_{i},定义一个变量x_{ij},表示是否要从v_{i}走到v_{j}。即如果是则x_{ij}为1,否则为0。

2.总旅费可以表示为z=\sum _{i=1}^{n}\sum_{j=1}^{n}c_{ij}x_{ij},如果i==j,则事先规定c_{ij}为一个充分大的实数M,以防止走这条路。

3.约束条件:

        (1)每个城市刚好进入一次  \sum_{i=1}^{n}x_{ij}=1

        (2)每个城市离开一次    \sum_{j=1}^{n}x_{ij}=1

        (3)不允许有子回路存在:

为防止在遍历过程中,出现子回路,即无法放回出发点的情况,附加一个强制性约束:

                u_{i}-u_{j}+nx_{ij}\leq n-1,i=1,...,n,j=2,...,n,

特别规定,u1==0,1<=u[i]<=n-1,i=2,3,...n;

证明:

        1.如果存在子回路,则至少有两个子回路。其中一个子回路不含起点v_{1},例如子回路4-5-6-4。则写出上面所述三个约束方程,得到0<=-3,这不可能,所以任何不含起点的子回路都不符合这个强制性约束。

        2.对任何整体巡回路线,只要u_{i}取合适值,都可以满足约束条件。

(2)相互排斥的约束条件

        只需要规定一个充分大的数M,决策变量y(y取0或1)。

在原约束条件上加上(1-y)*M,和y*M,y的不同取值就可以让一个约束不存在。

(3)代码实现

intcon=   (需要是整数的变量)

[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

三、非线性规划

(一)MATLAB规划_第2张图片

 (1)一般非线性规划

x=fmincon(fun,x0,A,B,Aeq,beq,lb,ub,nonlcon,options)

使用步骤:

1.编写目标函数文件以及非线性约束文件。 2.命令行窗口调用

function f=fun1(x);
f=x(1)^2+x(2)^2+8;


function[g,h]=fun2(x);
g=-x(1)^2+x(2);    %不等式约束  <=0

or 
g(n)=......        

h=-x(1)-x(2)^2+2;    %等式约束    =0


[x,fval]=fmincon('fun',rand(2,1),[],[],[],[],zero(2,1),[],'fun2')

(2)二次规划

(一)MATLAB规划_第3张图片

[x,fval]=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,optiuons)

 (一)MATLAB规划_第4张图片

你可能感兴趣的:(摆烂建模,matlab)