数学建模:多目标规划:ε约束法、 理想点法

一、ε约束法

定义

ε约束法通过将部分目标函数转化为约束条件,保留一个主要目标进行优化。

1、选择一个主要目标 fk​(x) 进行优化。

2、其他目标 fi​(x) 转化为约束 fi​(x)≤εi​,其中 εi​ 是决策者设定的容许阈值。

​原理​

​目标选择​​:决策者选择一个最重要的目标作为优化目标。

约束转换​​:其余目标被限制在某个可接受范围内。

​参数调整​​:通过调整 εi​,可以探索不同的Pareto最优解。

求解代码

clear
clc

prob = optimproblem('ObjectiveSense', 'min');
x = optimvar('x', 2, 'LowerBound', 0);

%定义约束
prob.Constraints.con1 = 0.5*x(1) + 0.25*x(2) <= 8;
prob.Constraints.con2 = 0.2*x(1) + 0.2*x(2) <= 4;
prob.Constraints.con3 = x(1) + 5*x(2) <= 72;
prob.Constraints.con4 = x(1) + x(2) >= 10;

%ε约束:污染 ≤ 33
prob.Constraints.epsilon_con = x(1) + 2*x(2) <= 33;

%主目标:利润最大化(转换为最小化 -利润)
prob.Objective = -2*x(1) - 3*x(2);

[sol, fval] = solve(prob);
fprintf('最优解: x1 = %.2f, x2 = %.2f\n', sol.x(1), sol.x(2));
fprintf('利润: %.2f, 污染: %.2f\n', -fval, sol.x(1) + 2*sol.x(2));

二、 理想点法

定义

理想点法通过计算各单目标的最优解(理想点),然后寻找最接近理想点的解。

  1. 先分别优化每个单目标,得到理想值 fi∗​。

  2. 构造评价函数,最小化目标值与理想值的加权距离(如欧氏距离)。

 

 

求解代码 

clear
clc

prob = optimproblem('ObjectiveSense', 'min');
x = optimvar('x', 2, 'LowerBound', 0);

%定义约束
prob.Constraints.con1 = 0.5*x(1) + 0.25*x(2) <= 8;
prob.Constraints.con2 = 0.2*x(1) + 0.2*x(2) <= 4;
prob.Constraints.con3 = x(1) + 5*x(2) <= 72;
prob.Constraints.con4 = x(1) + x(2) >= 10;

%计算理想点(单目标优化)
prob1 = prob;
%利润最大化
prob1.Objective = -2*x(1) - 3*x(2); 
[sol1, fval1] = solve(prob1);
%利润理想值
f1_ideal = -fval1; 

prob2 = prob;
%污染最小化
prob2.Objective = x(1) + 2*x(2); 
[sol2, fval2] = solve(prob2);
%污染理想值
f2_ideal = fval2; 

%构造理想点法的二次规划
prob_ideal = prob;
prob_ideal.Objective = (-2*x(1) - 3*x(2) - (-53))^2 + (x(1) + 2*x(2) - 10)^2;

[sol_ideal, fval_ideal] = solve(prob_ideal);
fprintf('最优解: x1 = %.2f, x2 = %.2f\n', sol_ideal.x(1), sol_ideal.x(2));
fprintf('利润: %.2f, 污染: %.2f\n', 2*sol_ideal.x(1) + 3*sol_ideal.x(2), sol_ideal.x(1) + 2*sol_ideal.x(2));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值