优化设计——多目标函数优化(降维/主目标法、线性加权法、理想点法)——MATLAB编程

2020.06.07修改(F2(x)函数输入输错了,只是结果偏差,程序逻辑没问题,已修正)

建议与本人前几篇博文程序互相参照,系列程序有继承性,一些程序段功能实现代码与原理在前几篇博文中都有提到!

案例如下:
在这里插入图片描述

优化原理

降维/主目标法

主目标法就是从多目标中依据重要程度选择一个目标作为主目标,而将其它目标转化为约束,即将多目标优化问题转化为单目标问题。

线性加权法

在具有多个指标的优化问题中,可以给予那些相对重要的指标较大的权系数,于是可将多目标优化问题转化为所有目标加权求和的单目标优化问题。

理想点法

即先求解每个单目标问题的最优解,将所有单目标问题最优解作为期望值,寻求可行域内距离期望解最近的点作为多目标优化问题的最优解。

具体原理不在这里过多赘述,不少优化设计有关资料都有关于此三种方法的详细介绍

MATLAB程序

三种方法的计算全部在同一主程序main内,附有四个子程序(复合型法优化程序minfun、minfun2与可行域判断程序judge、judge2
其中,minfun2judge2子程序为降维/主目标法服务,minfunjudge子程序为线性加权法与理想点法服务:

主程序main:

%% 初始参数设定,求f最小值
syms x1 x2 x
D1=100;D2=80;L=1000;E=2.06e11;%单位为mm
f1=pi/4*(x1*(D2^2-x2^2)+(L-x1)*(D1^2-x2^2));%目标函数输入
f2=64/(3*pi*E)*(x1^3*(1/(D2^4-x2^4)-1/(D1^4-x2^4))+L^3/(D1^4-x2^4));%目标函数输入
e2=1e-3;%复合型法收敛e2
xa=0.5;xb=40;%可行域内初始点,可通过judge函数选取
%约束条件(在 judge函数)

%% a.降维法、主目标法
% f1为主目标函数,f2转化为约束条件
% 先用复合型法求取f2的有约束最优解x20,得到ffx20
minx20=minfun(f2,xa,xb,e2);
ffx20=double(subs(f2,symvar(f2),minx20'));
%f2转化的约束条件为f2<=ff20+abs(e1*ffx20),g5=f2-ffx20-abs(e1*ffx20);
e1=0.02;
e3=ffx20+abs(e1*ffx20);
%再用复合型法直接求含g5约束条件的f1的解
minxa=minfun2(f1,xa,xb,e2,e3);
ffxa1=double(subs(f1,symvar(f1),minxa'));
ffxa2=double(subs(f2,symvar(f2),minxa'));
minxa
ffxa1
ffxa2
%% a END %%


%% b.线性加权法
fb=0.6*f1+0.4*f2;%构造新目标函数fb
%复合型法求解fb
minxb=minfun(fb,xa,xb,e2);
ffxb1=double(subs(f1,symvar(f1),minxb'));
ffxb2=double(subs(f2,symvar(f2),minxb'));
minxb
ffxb1
ffxb2
%% b END %%


%% c.理想点法求解
% 先对f1复合型法求解最优解xc1
xc1=minfun(f1,xa,xb,e2);
ffc1=double(subs(f1,symvar(f1),xc1'));
% 再对f2复合型法求解最优解xc2
xc2=minfun(f2,xa,xb,e2);
ffc2=double(subs(f2,symvar(f2),xc2'));
fc=sqrt((f1-ffc1)^2+(f2-ffc2)^2);
% 复合型法求解fc
minxc=minfun(fc,xa,xb,e2);
ffxc1=double(subs(f1,symvar(f1),minxc'));
ffxc2=double(subs(f2,symvar(f2),minxc'));
minxc
ffxc1
ffxc2
%% c END %%

复合型法minfun2:

function minx=minfun2(f,xa,xb,e2,e3)       

%% 初始参数设定,求f最小值
syms x1 x2 x
% 可行域条件在judge2子函数中.m文件中
h=2;     % 初始单纯形构造因子
hi=1;    % 初始单纯型构造因子系数
alpha=1; %  alpha  反射因子
ai=0;    %  反射因子系数
gama=2;  %  gama   扩张因子
beta=0.5;%  beta   收缩因子
eps=e2;%  eps    精度值
n = 0;  %迭代循环次数
m = 1000;  %精度差值
k = 0;  %数据记录
g = 0;  %操作记录
%% 构造初始单纯形
x0=[xa xb];% 给定在可行域内初始点
x0=x0';
X(:,1)=x0;
Num_var_f=length(symvar(f));%二维函数
for i = 1:Num_var_f %二维函数,需要三个顶点坐标
    x = zeros(Num_var_f,1);%预分配内存
    x=x0;
    x(i) = x0(i) + h/hi;
    X(:,i+1)=x;% 将单纯形按列从左往右存储
end
  • 14
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
理想点法(Ideal Point Method)是一种多目标函数优化,常用于解决多目标优化问题。在MATLAB编程中,可以使用理想点法来进行多目标函数优化。根据引用中提到的文章内容,可以参考该作者的博文程序进行编程实现。理想点法要思想是将多个目标函数通过线性加权进行加权求和,并设定一个理想点,通过优化逼近这个理想点,从而得到最优解。该方可以在解决多目标优化问题时提供一种有效的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [优化设计——多目标函数优化降维/目标线性加权理想点法)——MATLAB编程](https://blog.csdn.net/Randall_crow_J/article/details/106379225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [matlab数学建模第六章](https://blog.csdn.net/weixin_52546971/article/details/130297396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值