最优化实验报告
——外点、内点和混合罚函数法
实验目的
之前我们已经实验过无约束最优化问题,这次我们将实验一下,在有约束条件下,优化算法应该怎么做。
由于处理约束条件的办法不同,约束优化法可以分为直接间接两类。间接法的思想是将问题转化成无约束的,然后无约束方法求解,虽然算法复杂,但可以求解高维问题,效率高、鲁棒性好。直接法构造迭代过程,使迭代点在可行域D中,一步一步降低目标函数值。算法简单,但是计算量大,一般只用于求解不等式约束问题。
罚函数法又称乘子法,是指将有约束最优化问题转化为求解无约束最优化问题:其中M为足够大的正数, 起"惩罚"作用, 称之为罚因子,F(x, M )称为罚函数。内部罚函数法也称为障碍罚函数法。
这种方法是在可行域内部进行搜索,约束边界起到类似围墙的作用,如果当前解远离约束边界时,则罚函数值是非常小的,否则罚函数值接近无穷大的方法。在进化计算中,研究者选择外部罚函数法的原因主要是该方法不需要提供初始可行解。其中B(x)是优化过程中新的目标函数,Gi和Hj分别是约束条件gi(x)和hj(x)的函数,ri和cj是常数,称为罚因子。
本次实验将验证间接法中的内点、外点、混合罚函数法。
实验环境
本次实验,使用的程序语言为Python3.5.2,使用符号系统解析法推导计算,依赖的工具包为:
import math
import sympy
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
要想在IDE(集成开发环境)中实现画图的交互式效果,还得写
plt.ion()
实验内容及步骤
定义函数和符号
求解最优X
画出构造函数变化图
1. 外点罚函数法基本原理与步骤
问题:
minf(X)=−x1+x2
s.t.{g1(X)=lnx2≥0h1(X)=x1+x2−1≥0
构造一个增广函数:
F(X,Mk)=f(X)+Mkα(X)
其中惩罚函数:
α(X)=∑j=1m[hj(X)]2+∑i=1l[gi(X)]2u(gi(X))
α(X){0,当X∈D时,0,当X∉D时.
u(gi(X))={0,当gi(X)≥0时,1,当gi(X)<0时.i=1,2,⋯,l.
Mk
是一个逐渐增大的参数,称为惩罚因子。
当X∈D
时
F(X,Mk)=f(X)
算法流程图:
内点罚函数法基本原理与步骤
问题:
x(1+1)3+x213min
s.t.{g1(X)=x1−1≥0,g2(X)=x2≥0.
构造一个增广函数:
F(X,rk)=f(X)+rk∑i=1l1gi(X)
其中rk
称为障碍因子。
算法流程图:
混合罚函数法基本原理与步骤
问题:
minf(X)=−x1+x2
s.t.{g1(X)=lnx2≥0h1(X)=x1+x2−1≥0
构造一个增广函数:
F(X,rk)=f(X)+rk∑i=1l1gi(X)+1rk∑j=1m[hj(X)]2
算法流程图: