5.27

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

一、实验目的

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

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

 

二、实验内容

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

种植投入产出表

 

用  工

粪肥(吨)

化肥(千克)

利润(元)

a

450

35

350

1500

b

600

25

400

1200

c

900

30

300

1800

可提供资源

63000

3300

33000

 

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

3、操作要点

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

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

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

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

(5)按照模板撰写实验报告,要求规范整洁。

 

2、上机主要内容

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

其中,,。

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

3、操作要点

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

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

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

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

(5)按照模板撰写实验报告,要求规范整洁。

 

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

农业生产计划优化安排的实例:

1. 算法步骤

 

目标函数:

Maximize Z=1500x1​+1200x2​+1800x3​

约束条件

  1. 土地使用约束: x1+x2+x3≤100x_1 + x_2 + x_3 \leq 100x1​+x2​+x3​≤100
  2. 劳动力约束: 450x1+600x2+900x3≤63000450x_1 + 600x_2 + 900x_3 \leq 63000450x1​+600x2​+900x3​≤63000
  3. 粪肥约束: 35x1+25x2+30x3≤330035x_1 + 25x_2 + 30x_3 \leq 330035x1​+25x2​+30x3​≤3300
  4. 化肥约束: 350x1+400x2+300x3≤33000350x_1 + 400x_2 + 300x_3 \leq 33000350x1​+400x2​+300x3​≤33000
  5. 非负约束: x1≥0,x2≥0,x3≥0x_1 \geq 0, x_2 \geq 0, x_3 \geq 0x1​≥0,x2​≥0,x3​≥0

 

2. 代码

% 定义目标函数系数

f = [-1500, -1200, -1800]; % 由于linprog求解的是最小化问题,我们对系数取负

 

% 定义不等式约束矩阵 A 和向量 b

A = [

    1, 1, 1;         % 土地使用约束

    450, 600, 900;   % 劳动力约束

    35, 25, 30;      % 粪肥约束

    350, 400, 300    % 化肥约束

];

b = [100, 63000, 3300, 33000];

 

% 定义变量的下界和上界

lb = [0, 0, 0];  % 非负约束

ub = [];         % 无上界

 

% 求解线性规划问题

[x, fval] = linprog(f, A, b, [], [], lb, ub);

 

% 显示最优解

disp('最优解 x:')

disp(x)

 

% 显示最优值

disp('最大总利润:')

disp(-fval) % 别忘了对结果取负以得到最大利润

3. 结果

 

找到最优解。

 

最优解 x:

    60

     0

    40

 

最大总利润:

      162000

投资组合优化问题的实例:

1. 算法步骤

目标函数(最小化欧几里得距离的平方): Minimize f(x)=x1^2+x2^2+x3^2

约束条件(超平面方程): 2x1+x2+x3=4

 

2. 代码

% 定义二次项系数矩阵 H 和线性项系数向量 f

H = 2 * eye(3); % H 是单位矩阵的 2 倍,因为目标函数是 x_1^2 + x_2^2 + x_3^2

f = [0; 0; 0];  % f 为零向量

 

% 定义等式约束矩阵 Aeq 和向量 beq

Aeq = [2, 1, 1]; % 超平面的系数

beq = 4;         % 超平面的常数项

 

% 求解二次规划问题

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

 

% 显示最优解

disp('最优解 x:')

disp(x)

 

% 显示最优值(最短距离的平方)

disp('最优值 fval (最短距离的平方):')

disp(fval)

 

% 最短距离是目标函数值的平方根

distance = sqrt(fval);

disp('最短距离:')

disp(distance)

 

3. 结果

 

 

找到满足约束的最小值。

 

优化已完成,因为目标函数沿

可行方向在最优性容差值的范围内呈现非递减,

并且在约束容差值范围内满足约束。

 

<停止条件详细信息>

最优解 x:

    1.3333

    0.6667

    0.6667

 

最优值 fval (最短距离的平方):

    2.6667

 

最短距离:

    1.6330

四、心得体会

 

在这次实验中,我深入学习了如何应用线性规划和二次规划技术来解决实际问题,并通过使用 Matlab 的优化工具箱来实现这些优化问题的求解。通过对农业生产计划优化安排和从点到超平面最短距离的求解,我不仅巩固了数学建模的基础知识,还提升了在 Matlab 中进行实际问题求解的能力。


实验总结

工程数学是将数学原理和方法应用于工程问题的一门学科。它结合了数学理论与工程实践,帮助解决复杂的工程问题。在工程数学中,数学不仅仅是一个工具,它是理解和解决工程问题的核心手段。

从这这几次实验中,我深刻体会到工程数学的应用的广泛,对我们计算机专业的算法设计与分析提供了帮助;

通过这学期的学习和实验,我明白了工程数学作为工程学科的基础,不仅是理解和解决工程问题的重要工具,也是推动工程技术进步的关键动力。在现代工程中,掌握工程数学的理论和方法,是工程师和科学家应对复杂挑战、推动技术创新的重要能力。未来,随着科学技术的不断发展,工程数学将继续发挥其不可替代的作用,推动工程领域的新发展和新突破。

通过系统学习和应用工程数学,工程师能够更好地应对复杂的工程问题,优化设计和系统性能,提高工作效率,促进科技进步和社会发展。

 

posted @ 2024-06-18 09:21  晨观夕  阅读(0)  评论(0编辑  收藏  举报