2024.6.6

实验五:MATLAB最优化工具箱的使用

一、实验目的

通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。

通过一个投资组合优化问题的实例求解,培养学生解决实际二次规划问题的初步能力;熟悉线 性规划的建模过程; 掌握 Matlab 优化工具箱中线性规划函数的调用。

 

 

二、实验内容

 

  (1)线性规划应用案例的求解

某村计划在100公顷的土地上种植a、b、c三种农作物。可以提供的劳力、粪肥和化肥等资源的数量,种植每公顷农作物所需这三种资源的数量,以及能够获得的利润如表所示。

种植投入产出表

 

用  工

粪肥(吨)

化肥(千克)

利润(元)

a

450

35

350

1500

b

600

25

400

1200

c

900

30

300

1800

可提供资源

63000

3300

33000

 

其中一个劳动力干一天为1个工。现在要求为该村制定一个农作物的种植计划,确定每种农作物的种植面积,使得总利润最大。

操作要点

(1)建立线性规划的数学模型;

(2)安装Matlab优化工具箱(Optimization Toolbox),并学习工具箱中求解线性规划的函数;

(3)利用Matlab优化工具箱解线性规划问题。

(4)运行该程序,在命令窗记录下最优解x和对应的最优值fval。

(2)二次规划应用案例的求解

求解从一点(0,0,0)到超平面的最短距离,

其中,,。

通过建模构造二次规划问题,求解以上问题的最优解和最优值。

操作要点

(1)建立二次规划的数学模型;

(2)安装Matlab优化工具箱(Optimization Toolbox),并学习工具箱中求解二次规划的函数;

(3)利用Matlab优化工具箱解二次规划问题。

(4)运行该程序,在命令窗记录下最优解x和对应的最优值fval。

 

 

三、算法步骤、代码、及结果

   1. 算法步骤

    问题一:   

算法步骤

设x1,x2,x3分别表示农作物A,B,C的种植面积

问题模型

max z = 1500x1 + 1200x2 + 1800x3

s.t.  

x1 + x2 + x3 = 100

450x1 + 600x2 + 900x3 <=63000

35x1 + 25x2 + 30x3 <=3300

350x1 + 400x2 + 300x3 <=33000

x1, x2, x3 >= 0

 

问题二:   

算法步骤

该问题可以用二次规划来求解。首先,我们需要确定这个问题的数学模型。

数学模型:
       设点( Xi , X , Xy )到超平面 Ax = b 的最短距离为 d .则该问题的目标是求最短距离 d ,       即:
       min 
       而约束条件为点(,,)在超平面 Ax = b 上,因此有:
       Ax = b 
       同时, d 表示所求的距离,可以表示为:
       df =
       将 of 表示成决策变量的形式,得到:
       d = xTx 
       其中 X =[ X ],为,为 g ] T ,为决策变量。因此,我们可以列出如下的二次规划模型:
       min XX 
       s . t . Ax = b 
       xERs 

 

   2. 代码

问题一:

>>f=[1500 1200 1800]';

>> f=-f;

>> a=[450 600 900;35 25 30;350 400 300];

>> b=[63000 3300 33000]';

>> acq=[1 1 1];

>> aeq=[1 1 1];

>> beq=[100];

>> lb=zeros(3,1);

>> [x,fval,exitflag,output,lamdba]=linprog(f,a,b,aeq,beq,lb)

 

问题二:

% 构造二次规划模型

H = 2 * eye(3);

f = zeros(3,1);

Aeq = [1 1 0; 1 0 1];

beq = [1;0];

x0 = [0; 0; 0];

% 调用quadprog函数求解

[x,fval] = quadprog(H, f, [], [], Aeq, beq, [], [], x0);

 

3. 结果

 

 

四、心得体会

通过本次实验,我深入学习了MATLAB优化工具箱在解决线性规划和二次规划问题中的应用,感受到了它在实际问题中的强大功能和便捷性。这次实验不仅增强了我对优化理论的理解,也提升了我使用MATLAB编程解决实际问题的能力。

posted @ 2024-06-13 15:56  liuxuechao  阅读(3)  评论(0编辑  收藏  举报