当前位置: 首页 > news >正文

数学建模:多目标优化算法

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

数学建模:多目标优化算法

多目标优化

分别求权重方法

算法流程:

  1. 两个目标权重求和,化为单目标函数,然后求解最优值

min ⁡ x ∑ i = 1 m w i F i ( x ) s.t.  g ( x ) ⩽ 0 h ( x ) = 0 \begin{array}{ll}\min _{x} & \sum_{i=1}^{m} {w_{i} F_{i}(x)} \\\\\text { s.t. } & g(x) \leqslant 0 \\\\& h(x)=0\end{array} minx s.t. i=1mwiFi(x)g(x)0h(x)=0

clc;clear;%% 指定初始解
x0 = zeros(3,1);
% <线性>不等约束
A = [2,1,3];
B = [6];
% <线性>等式约束
Aeq = [];
Beq = [];
% 变量上下限
LB = zeros(3,1);
UB = 1*ones(3,1);
%% 乘以权重,化为单目标求最优值
% 有几个目标函数,就写几个权重,然后依次相乘再相加
W1 =0.5;
W2 = 0.5;
fun = @(x) (-x(1)^2+x(2)^2-x(2)*x(3)^2)*W1 + (2*x(1)^2-x(2)^3+2*x(2)*x(3))*W2;%% 取得非线性不等式约束函数
nonlcon = @noLinearLimited;
%% 求解fun单目标最优值
[x,fval] = fmincon(fun,x0,A,B,Aeq,Beq,LB,UB,nonlcon);objstr=['目标函数最优值:',num2str(-fval)];
disp(objstr)
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
end%% 非线性不等式约束的表达式,如果有多个,则在C后面加; 补充即可
function [C,Ceq] = noLinearLimited(x)C = [x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6];Ceq = [];
end

Goal attain方法求解

  1. 使用Goal attain求解目标最优化问题,可以调用matlab中的函数:fgoalattain

min ⁡ γ , x γ s.t.  F i ( x ) − w i γ ⩽ F i ∗ for  i = 1 , … , m g ( x ) ⩽ 0 h ( x ) = 0 \begin{array}{ll}\min _{\gamma, x} \gamma \\\\\text { s.t. } & F_{i}(x)-w_{i} \gamma \leqslant F_{i}^{*} \quad \text { for } i=1, \ldots, m \\\\& g(x) \leqslant 0 \\\\& h(x)=0\end{array} minγ,xγ s.t. Fi(x)wiγFi for i=1,,mg(x)0h(x)=0

clc;clear;%% 指定初始解
x0 = zeros(3,1);
% <线性>不等约束
A = [2,1,3];
B = [6];
% <线性>等式约束
Aeq = [];
Beq = [];
% 变量上下限
LB = zeros(3,1);
UB = 1*ones(3,1);
%% 分两个(n个)非线性目标的最优值
% 两个目标函数
fun1 = @(x) -x(1)^2+x(2)^2-x(2)*x(3);
fun2 = @(x) 2*x(1)^2-x(2)^3+2*x(2)*x(3);%% fun1的最优化:
nonlcon = @noLinearLimited;
[x1,fval1] = fmincon(fun1,x0,A,B,Aeq,Beq,LB,UB,nonlcon);objstr=['目标函数最优值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值为:',num2str(x1(i))];disp(xstr)
end% fun2的最优化:
[x2,fval2] = fmincon(fun2,x0,A,B,Aeq,Beq,LB,UB,nonlcon);objstr=['目标函数最优值:',num2str(fval2)];
disp(objstr)
for i=1:length(x2)xstr=['x',num2str(i),'的值为:',num2str(x2(i))];disp(xstr)
end
%% 多目标优化
goal = [fval1,fval2]; % 目标是接近于单目标的最优值
func = @(x) [-x(1)^2+x(2)^2-x(2)*x(3);2*x(1)^2-x(2)^3+2*x(2)*x(3)];
W = [1,1];% 自己赋值权重,两个(n个)非线性
[x,fval] = fgoalattain(func,x0,goal,W,A,B,Aeq,Beq,LB,UB,nonlcon);disp('在两个目标的优化结果为')
disp(func(x))
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
end%% 非线性不等式约束的表达式,如果有多个,则在C后面加; 补充即可
function [C,Ceq] = noLinearLimited(x)C = [x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6];Ceq = [];
end
http://www.lryc.cn/news/151740.html

相关文章:

  • arcmap 在oracle删除表重新创建提示表名存在解决放啊
  • 新版HBuilderX在uni_modules创建搜索search组件
  • Ubutnu允许ssh连接使用root与密码登录
  • MySQL中表的设计
  • UE4/5在蓝图细节面板中添加函数按钮(蓝图与c++的方法)
  • Python爬虫乱码问题之encoding和apparent_encoding的区别
  • Docker技术--Docker简介和架构
  • 废品回收功能文档
  • 【ARMv8 SIMD和浮点指令编程】NEON 乘法指令——asimdrdm
  • [SWPUCTF 2022]——Web方向 详细Writeup
  • Shell编程:流程控制与高级应用的深入解析
  • 一文讲通嵌入式现状
  • 设计模式-代理模式Proxy
  • 如何使用CSS实现一个自适应等高布局?
  • Google colab部署VITS——零门槛快速克隆任意角色声音
  • 14 | Spark SQL 的 DataFrame API 读取CSV 操作
  • redis面试题二
  • 虚拟现实(VR)和增强现实(AR)
  • 如何使用ChatGPT提词器,看看这篇文章
  • vue3-vuex持久化实现
  • 详解 SpringMVC 的 @RequestMapping 注解
  • 类的静态成员变量 static member
  • MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)
  • Linux系统Ubuntu以非root用户身份操作Docker的方法
  • m4s格式转换mp4
  • SQL sever中库管理
  • 模板方法模式简介
  • 自动化运维工具-------Ansible(超详细)
  • 计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python
  • Citespace、vosviewer、R语言的文献计量学 、SCI