优化设计-复合型法-MATLAB编程求解

  • 优化设计-有约束复合型法-MATLAB编程求解
    • 有约束复合型法迭代步骤(计算流程图)
    • MATLAB主程序
    • 约束条件判断子函数
    • 运算结果与可行域

优化设计-有约束复合型法-MATLAB编程求解

前段时间做的复合型法作业,分享到博客中,欢迎大家指点!
**PS:**本次复合型法编程受到了博主“天涯铭”在其博文《MATLAB多维极值之单纯形法》中单纯型法编程的启发,程序编写也借鉴了其单纯型法的编写思路。
(原文链接如下:https://blog.csdn.net/STM89C56/article/details/105725205

本文求解案例如下:

有约束复合型法迭代步骤(计算流程图)

个人编写的复合型法迭代步骤(计算流程图)如下图所示:

本程序增加了反射系数收缩次数的限制,在利用最差点求取反射点时,如果多次收缩反射系数后仍不能使得反射点位于可行域内(说明反射方向不利),则利用次差点进行反射点求取。若利用次差点在反射系数缩减一定次数内也无法使得反射点位于可行域内,则重新构造初始单纯型。

MATLAB主程序

主程序代码:

clear all;clc
%% 初始参数设定,求f最小值
syms x1 x2 x
f=120*x1+x2;% f 函数符号表达式
% 可行域条件在judge子函数中.m文件中
h=4;     % 初始单纯形构造因子
hi=1;    % 初始单纯型构造因子系数
alpha=1; %  alpha  反射因子
ai=0;    %  反射因子系数
gama=2;  %  gama   扩张因子
beta=0.5;%  beta   收缩因子
eps=5;%  eps    精度值
n = 0;  %迭代循环次数
m = 10000;  %初始精度差值
k = 0;  %数据记录
g = 0;  %操作记录
%% 构造初始单纯形
x0=[20 15];% 给定在可行域内初始点
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
for i = 1:Num_var_f+1F_val(i)=double(subs(f,symvar(f),X(:,i)'));
end
[F_sort,F_index]=sort(F_val);%从小到大排列函数% 最好点f_best_0=F_sort(1);X_best_0=X(:,F_index(1));% 最差点f_bad_n=F_sort(end);X_bad_n=X(:,F_index(end));% 次差点f_nextbad_1n=F_sort(end-1);X_nextbad_1n=X(:,F_index(end-1));% 计算形心Xc_n1=1/Num_var_f*sum(X(:,F_index(1:end-1)),2);f_Xc_n1=double(subs(f,symvar(f),Xc_n1'));%% 判断顶点不在可行域内以及型心在不在可行域内
while judge(X(1,1),X(2,1))<1&&judge(X(1,2),X(2,2))<1&&judge(X(1,3),X(2,3))<1&&judge(Xc_n1(1,1),Xc_n1(2,1))<1hi=2*hi;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%计算函数值for i = 1:Num_var_f+1F_val(i)=double(subs(f,symvar(f),X(:,i)'));end[F_sort,F_index]=sort(F_val);%从小到大排列函数% 最好点f_best_0=F_sort(1);X_best_0=X(:,F_index(1));% 最差点f_bad_n=F_sort(end);X_bad_n=X(:,F_index(end));% 次差点f_nextbad_1n=F_sort(end-1);X_nextbad_1n=X(:,F_index(end-1));% 计算形心Xc_n1=1/Num_var_f*sum(X(:,F_index(1:end-1)),2);f_Xc_n1=double(subs(f,symvar(f),Xc_n1'));
end%% 循环迭代语句while m > eps%% 反射flag = 0;X_reflect_n2=Xc_n1+alpha*(Xc_n1-X_bad_n);f_reflect_n2=double(subs(f,symvar(f),X_reflect_n2'));X_reflect_n2ai=0;
while judge(X_reflect_n2(1,1),X_reflect_n2(2,1))<1%判断反射点在不在可行域内ai=ai+1; if ai>10  %% 系数缩小是否过多flag = 0;X_reflect_n2=Xc_n1+alpha*(1/2^(ai-10))*(Xc_n1-X_nextbad_1n);f_reflect_n2=double(subs(f,symvar(f),X_nextbad_1n'));;%% (方向不对,利用次差点重新找方向)if ai>20disp(’无法收敛,请重新构造初始单纯型’);breakendelseflag = 0;X_reflect_n2=Xc_n1+alpha*(1/2^ai)*(Xc_n1-X_bad_n);f_reflect_n2=double(subs(f,symvar(f),X_reflect_n2'));end
end%% 反射成功 if  f_reflect_n2<f_best_0  % 反射点R<最好点%% 进行扩张X_reflect_expand_n3=Xc_n1+gama*(Xc_n1-X_bad_n);%扩张f_reflect_expand_n3=double(subs(f,symvar(f),X_reflect_expand_n3'));if f_reflect_expand_n3 < f_best_0 &&judge( X_reflect_expand_n3(1,1),X_reflect_expand_n3(2,1))>=1%判断扩张点是否在可行域内%扩张点继续缩小X(:,F_index(end)) = X_reflect_expand_n3; %将其作为单纯型的新顶点g=1;%扩张点else X(:,F_index(end)) = X_reflect_n2; %采用扩张前的点作为单纯形的新顶点g=0;%反射点endflag = 1; %反射成功标志位end%% 反射失败if flag == 0  %说明没有反射成功if f_reflect_n2 < f_nextbad_1n  %反射点<次差点X(:,F_index(end)) = X_reflect_n2;%采用该反射点作为新的顶点g=0;%反射点%% 进行收缩else   % f_reflect >= f_nextbadX_reflect_shrink_n4=Xc_n1+beta*(X_reflect_n2-Xc_n1);% 收缩点f_reflect_shrink_n4=double(subs(f,symvar(f),X_reflect_shrink_n4'));X(:,F_index(end)) = X_reflect_shrink_n4;g=2;%收缩点endend%% 计算迭代完后函数序列,并计算精度for i = 1:Num_var_f+1F_val(i)=double(subs(f,symvar(f),X(:,i)'));end[F_sort,F_index]=sort(F_val);%从小到大排列函数% 最好点f_best_0=F_sort(1);X_best_0=X(:,F_index(1));% 最差点f_bad_n=F_sort(end);X_bad_n=X(:,F_index(end));% 次差点f_nextbad_1n=F_sort(end-1);X_nextbad_1n=X(:,F_index(end-1));% 计算形心Xc_n1=1/Num_var_f*sum(X(:,F_index(1:end-1)),2);f_Xc_n1=double(subs(f,symvar(f),Xc_n1'));% 计算精度与迭代次数m=abs(double(subs(f,symvar(f),X(:,F_index(end))'))-f_Xc_n1);n=n+1;% 运算数据记录end
%% 结果输出
minx=X_best_0;
ff=120*X_best_0(1,1)+X_bes

约束条件判断子函数

judge子函数代码:


judge子函数如下:
function [J]=judge(x1,x2)
g1=1-0.25*x2;%
g2=1-7/45*x1*x2;
g3=1-7/45*x1^3*x2;
g4=1-1/320*x1*x2^2;%
g5=-x1;%
g6=-x2;
% 可行域条件
if g1<=0&&g2<=0&&g3<=0&&g4<=0&&g5<=0&&g6<=0J=1
elseJ=0
end

运算结果与可行域

程序运行结果为:最优点(0.7217,21.0939),此时f= 107.6936。此时程序所取eps=5

可行域图与最优点于图上标记:

优化设计-有约束复合型法-MATLAB编程求解相关推荐

  1. 泊松方程 matlab,MATLAB编程求解二维泊松方程

    <MATLAB编程求解二维泊松方程>由会员分享,可在线阅读,更多相关<MATLAB编程求解二维泊松方程(3页珍藏版)>请在人人文库网上搜索. 1. 真解 u=sin(pi*x) ...

  2. 主程序分析法MATLAB编程,专题五  概率统计问题的Matlab求解

    [实验目的及要求] I.熟练掌握Matlab编程中常见概率分布的概率密度.概率分布.逆分布.均值和方差等语句的调用格式,学会用Matlab对服从各种分布的样本进行参数估计和假设检验.对实际问题,能够进 ...

  3. 坎蒂雷赋权法 matlab,多重网格法求解雷诺方程的MATLAB编程

    这是MATLAB有限差分法求解雷诺方程,可以参考下.希望对你有用 function [Fx,Fy]=FDM_circular(X,Y,X_dot,Y_dot) Fx=0; Fy=0; epsilon= ...

  4. 矩阵位移法matlab编程,矩阵位移法_MATLAB_GUI.doc

    Matrix_Displacement_Method--by MATLAB GUI PAGE58 / NUMPAGES64 yanfeng39@zju.edu.cn <结构力学>课程设计之 ...

  5. matlab常数编程,Matlab编程,求解出卡普雷卡尔(Kaprekar)常数

    用matlab编程,计算出卡普雷卡尔(Kaprekar)常数 取任意一个4位数(4个数字均为同一个数的除外),将该数的4个数字重新组合,形成可能的最大数和可能的最小数,再将两者之间的差求出来:对此差值 ...

  6. MATLAB编程求解函数零点

    MATLAB 中有很多函数可以帮助你求解函数零点.其中常用的有 fsolve 函数. 使用方法如下: symsx f = x^2 - 3; x0 = 1; x = fsolve(f, x0) 上面的代 ...

  7. 复合型法matlab,复合形法程序出错求大神改错急急急

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function[ x,minf]=minconSimpSearch2(f,g,gg,X,alpha,sita,gama,beta,var,eps) % ...

  8. 保角变换法matlab编程,保角变换解法pdf.PDF

    保角变换解法pdf 使用教材:<材料固体力学>上册周益春编著科学出版社 弹性力学问题的求解有赖于边界条件的简化.对于复杂的边界形状,如果利用空间的变换,将是简化问 题求解的最好途径.保角变 ...

  9. matlab迭代求解泊松方程,MATLAB编程求解二维泊松方程

    %%%% 真解 u=sin(pi*x)*sin(pi*y) %%% %%%% 方程 -Laplace(u)=f %%%%%% %%%% f=2*pi^2*sin(pi*x)*sin(pi*y) %%% ...

最新文章

  1. SpringBoot2.x 官方推荐缓存框架-Caffeine高性能设计剖析
  2. vs开发工具报错:参数错误 异常来自 HRESULT:0x80070057 E_INVALIDARG
  3. PHP基本连接数据库
  4. oracle 表空间维护
  5. Spring中ApplicationContext加载机制
  6. 苹果Mac修改图标“偷梁换柱”的一种简单方法
  7. 小程序功能模块-优客娱乐视频1.0.5源码
  8. 【C#】C#实现鼠标滚轮的图像居中缩放
  9. 办公OA的附件无法下载、打不开的解决办法
  10. 文本框添加问内容下划线
  11. redis 获取类似key的所i有的值_高可用 Redis 分布式锁实施方案!
  12. 三大检索工具(SCI、EI、ISTP)
  13. 北京国际车展直击:上汽集团近百款新车彰显雄厚实力
  14. 国产手机会使用鸿蒙,小米等国产手机会使用鸿蒙系统吗?
  15. HTML+CSS网页设计期末课程大作——校园篮球网页(12页) 关于运动的HTML网页设计-----篮球
  16. 周杰伦:他们只顾嘲讽,却不知眼前是神的降生
  17. Android 打造形形色色的进度条 实现可以如此简单
  18. 飞行器控制中的欧拉角(roll, pitch, yaw)
  19. ipad1安装xbmc及配置教程
  20. ez-usb fx3 linux,Mouser带来最新USB 3.0技术:赛普拉斯EZ-USB FX3和恩智浦USB 3.0超高速转接驱动器...

热门文章

  1. ROS系统中launch文件无法启动
  2. 个人界面 头像 图片选择(相册,拍照)--如何调用系统的相册,裁剪并且上传
  3. IDEA中maven的Plugins报红解决方法
  4. SXOI2017游记
  5. 计算机教室是在音乐教室旁边吗英语,小学英语四年级下册Unit1教材同步音频+释义...
  6. 2022-2027年中国工业缝纫机行业发展监测及投资战略研究报告
  7. ELK_filebeat_6.5搭建企业日志搜集系统
  8. 高级数据系统 之 二、LSM-tree model for KVS
  9. 南航推出特色餐食 温暖旅客春节归家路
  10. 47.serch基本语法