优化设计-内点惩罚函数法-MATLAB编程

  • 优化设计-内点惩罚函数法-MATLAB编程
    • 内点惩罚函数法介绍
    • MATLAB程序编程
      • 无约束优化环节采用梯度法
      • 无约束优化环节采用单纯型法

优化设计-内点惩罚函数法-MATLAB编程

有关于内点惩罚法原理的详细介绍可参考:
《结构优化设计概论》[M]国防工业出版社,1997.谢祚水,或者其他优化设计有关书籍
(谢祚水先生的书很经典,所以放这了)

内点惩罚函数法介绍

内点法是将惩罚函数定义在可行域内,并从可行域内某一初始点出发,在可行域内进行迭代的方法。它的最大特点是在给定一个初始可行的方案之后,通过迭代寻优, 可以得到一系列可行的、逐步改进的及可任意选取的设计方案。这对决策人员具有很大的可选灵活性,他既可以选择约束最优解x*,也可以根据具体情况,选择其中任何一个无约束最优解x*(r(k))。由于内点法的所有迭代点始终是在可行域内部进行的,因而它不能处理具有等式约束条件的优化问题。

其算法步骤可以总结为:

MATLAB程序编程

本程序运行有一定的小问题,即运行结果可能超出可行域外,而接近原函数无约束优化时的解,即惩罚函数未起到应有的作用。于是我在惩罚函数选取时选取了三种形式的惩罚函数,可结果依然不理想。一些研究有说出现这种情况可能是初始惩罚因子选取过小的问题,但是调整初始惩罚因子后,程序结果依旧没有太大的改变,现将程序附下,希望能有人指点下!!!

程序在利用无优化约束方法求取极值点这一环节,个人用了两种方法,一种是传统的梯度法求解,但是编写的程序适用于二维变量求解,且在矩阵求逆环节计算速度较慢,于是采用了第二种方法:单纯型法,可对多维变量函数求解,有关于单纯型法的编程,可详见此文:https://blog.csdn.net/Randall_crow_J/article/details/106305624

无约束优化环节采用梯度法

MATLAB程序如下:

%% 内点法惩罚函数选取在line16可调整,计算逆矩阵(line30)计算速度很慢
clear all;clc
syms x1 x2 x;
f=x1^2+x2^2-x1*x2-10*x1-4*x2+60;%原函数
g1=x1-6;g2=x2-8;g3=x1+x2-11;%约束条件转换函数
e1=0.1;%梯度法最优值收敛精度
e2=0.1;%内点法收敛精度
D=1;%差值
k=1;
A(k)=0;B(k)=0;%A,B分别记录x1,x2点,初始点为[0,0]
r(k)=3;a=0.7;%r为惩罚因子,a为递增系数
%% 循环
while  D>e2 %罚因子迭代收敛条件x1=A(k);x2=B(k);
%约束问题转换后的新目标函数;
F=f-r(k)*(log10(-g1)+log10(-g2)+log10(-g3));%F=f+r(k)*(1/g1^2+1/g2^2+1/g3^2);%F=f-r(k)*(1/g1+1/g2+1/g3);
%梯度法求F的最优解xr
Fx1=diff(F,'x1');Fx2=diff(F,'x2');Fx1x1=diff(Fx1,'x1');Fx1x2=diff(Fx1,'x2');Fx2x1=diff(Fx2,'x1');Fx2x2=diff(Fx2,'x2');%求偏导、海森元素。
for n=1:100 %梯度法求最优值。
F1=subs(Fx1); %求解梯度值和海森矩阵
F2=subs(Fx2);
F11=subs(Fx1x1);
F12=subs(Fx1x2);
F21=subs(Fx2x1);
F22=subs(Fx2x2);
if(double(sqrt(F1^2+F2^2))<=e1) %梯度法最优值收敛条件
A(k+1)=double(x1);B(k+1)=double(x2);
break;
else
X=[x1 x2]'-([F11 F12;F21 F22])\[F1 F2]';
x1=X(1,1);x2=X(2,1);
end
end
D=double(sqrt((A(k+1)-A(k))^2+(B(k+1)-B(k))^2));
r(k+1)=a*r(k);
k=k+1;
end
A(k)
B(k)
double(subs(f))

无约束优化环节采用单纯型法

MATLAB程序如下:

%% 内点法惩罚函数选取的问题line16
clear all;clc
syms x1 x2 x;
f=x1^2+x2^2-x1*x2-10*x1-4*x2+60;%原函数
g1=x1-6;g2=x2-8;g3=x1+x2-11;%约束条件转换函数
e1=0.001;%梯度法最优值收敛精度
e2=0.001;%内点法收敛精度
D=1;%差值
k=1;
A(k)=0;B(k)=0;%A,B分别记录x1,x2点,初始点为[0,0]
r(k)=10;a=0.7;%r为惩罚因子,a为递增系数
%% 循环
while  D>e2 %罚因子迭代收敛条件x1=A(k);x2=B(k);
%约束问题转换后的新目标函数
%F=f-r(k)*(log10(-g1)+log10(-g2)+log10(-g3));
F=f+r(k)*(1/(g1^2)+1/(g2^2)+1/(g3^2));
%F=f-r(k)*(1/g1+1/g2+1/g3);
%单纯形法求F的最优解xr
minx=minfunction(F,x1,x2,e1);
A(k+1)=minx(1,1);B(k+1)=minx(2,1);
D=double(sqrt((A(k+1)-A(k))^2+(B(k+1)-B(k))^2));
r(k+1)=a*r(k);
k=k+1;
end
A(k)
B(k)
double(subs(f))

欢迎各位大佬指正程序中的问题!!!

优化设计-内点惩罚函数法-MATLAB编程相关推荐

  1. 内点惩罚函数法matlab_拉格朗日乘数法求解多元条件极值问题

    点击蓝字,关注废柴姐姐 拉格朗日乘数法 " 一种不直接依赖消元法而求解条件极值问题的有效方法 二元函数入手 我们从  皆为二元函数这一简单情况人手. 欲求函数 的极值,其中受条件 的限制. ...

  2. matlab外罚函数实验报告,外罚函数法matlab

    罚函数法 37页 1下载券 罚函数法 11页 1下载券 罚函数法MATLAB程序 5页 2下载券 1120 罚函数法 (罚函数法... 52页 1下载券 ...... c Ax ? b . 3 算法的 ...

  3. 罚函数法外点matlab,内点罚函数法matlab

    罚函数的算法与实例 例3.24 Matlab 的使用 u=0; [x,y]=me... 5.6 约束变尺度法 7.2 乘子(罚函数)法信息与计算科学系 邵建峰邵建峰 本节内容: ? 一. 等式约束问题 ...

  4. matlab 约束函数,【优化求解】MATLAB约束优化之惩罚函数法

    一.算法原理 之前我们了解过的算法大部分都是无约束优化问题,其算法有:黄金分割法,牛顿法,拟牛顿法,共轭梯度法,单纯性法等.但在实际工程问题中,大多数优化问题都属于有约束优化问题.惩罚函数法就可以将约 ...

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

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

  6. Algorithm之PrA:PrA之nLP非线性规划算法经典案例剖析+Matlab编程实现

    Algorithm之PrA:PrA之nLP整数规划算法经典案例剖析+Matlab编程实现 目录 有约束非线性规划案例分析 1.投资决策问题 2.利用Matlab实现求解下列非线性规划​ 无约束极值问题 ...

  7. matlab编程与最优化设计应用,MATLAB编程与最优化设计应用

    MATLAB编程与最优化设计应用 出版时间:2013年08月 定 价:59.00 I S B N :9787121210525 所属分类: 计算机•网络 &nbsp计算机•网络  >   ...

  8. 乘子法罚函数法matlab实例,罚函数法(罚函数法与乘子法合订).ppt

    罚函数法(罚函数法与乘子法合订) 收敛性定理 5 算法评价(优缺点) 二.内点罚函数法(碰壁函数法)-内点法 2 罚函数的特点 3. 算法实现 收敛性定理 构造新的辅助函数 2. 算法实现 乘子法是由 ...

  9. Matlab编程与数据类型 -- 单元数组

    Matlab编程与数据类型 – 单元数组

  10. matlab 天线设计 泰勒加权_微带天线设计尺寸MATLAB编程及其仿真验证

    龙源期刊网 http://www.qikan.com.cn 微带天线设计尺寸 MATLAB 编程及其仿真 验证 作者:杨小敏 母玉泽 严月 郭小康 马波 张栋 莫骄弟 来源:<中国科技博览> ...

最新文章

  1. JS滚动条到网页底部自动加载更多内容
  2. c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升
  3. c++ 内存管理_Python Bindings - 从 Python 调用 C/C++
  4. 为type=file的input标签制定样式——CSS基础
  5. Firewald 防火墙使用手册
  6. java 简单数组_Java 数组分析及简单实例
  7. 为 Retrofit2 提供的 FastJson 转换库
  8. 【转载】偏最小二乘法回归(Partial Least Squares Regression)
  9. 学生选课管理系统(python)
  10. zec挖矿(zcash挖矿)鱼池跟蚂蚁矿池的比较到底哪个好?哪个收益高? (二)
  11. Oracle索引类型-参考
  12. 韩国严厉监管元宇宙相关企业
  13. 页面加载缓冲的login
  14. 算法训练 瓷砖铺放 【递归】java
  15. 待我兵临城下,许你半世繁华
  16. 会讲话是学问,会听话是学问
  17. The bean 'llWebSocketHandler' could not be injected because it is a JDK dynamic proxy that implemen
  18. sublime用浏览器打开方法
  19. Android才是游戏开发者的乐土
  20. python量化实战_Python量化交易实战

热门文章

  1. c++编写COM组件,并使用该组件
  2. 示波器学习笔记(2)——模拟示波器
  3. Win10中卸载IE11
  4. eucalyptus 云平台搭建
  5. 2.10 数值分析: 条件数的定义及计算
  6. 解决苹果电脑OS X 10.8.5或10.7.5 老版本系统升级问题
  7. mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具
  8. 手机直播app制作大揭秘之视频直播系统方案
  9. 华为HG8347R光猫 4台设备连接限制破解全过程
  10. 母亲节微信公众号走心文章就用来逗编辑器排版