下载可编辑
运行结果为:
项目五 常用约束最优化方法
[实验目的]
编写外点罚函数法、外点罚函数法的程序。 [实验准备]
1.掌握外点罚函数法的思想及迭代步骤; 2.掌握内点罚函数法的思想及迭代步骤。 [实验内容及步骤]
编程解决以下问题:
1.用外点罚函数法编程计算
minf(X)??x1?x2,?g1(X)?lnx2?0,s.t.??h1(X)?x1?x2?1?0,
?5??10精度.
外点法的计算步骤:
(1)给定初始点x,初始罚因子?(1),
(0)
放大系数c>1;允许误差e>0,设置k=1;
(k-1)
(2)以x作为搜索初始点,求解无约束规划问题
minf(x)??P(x),令x(k)为所求极小点。
(k) (3)当?P(x执行。
)?e,则停止计算,得到点x(k);否则,令?(k?1)?c?(k),返回(2)
程序清单
外点罚函数法程序见附录11
实验结果
实验结果为
.专业.整理.
下载可编辑
运行结果为:
2.用内点罚函数法编程计算
初始点取为
X0?[3,4]T,初始障碍因子取u1?10,缩小系数取c?0.1.
?1?min?(x1?1)3?x2?,?3??x1?1?0,s.t.??x2?0.
内点罚步骤:
(1) 给定初始内点x(0)?S,允许误差e>0,
障碍参数?(1),缩小系数b?(0,1),置k=1;
(2) 以x(k?1)为初始点,求解下列规划问题:
minf(x)??(k)B(x),令x(k)为所求极小点
s.t.x?S(k)(3) 如果?B(x(k))?e,则停止计算,得到结果x(k),
(k?1)(4) 否则令?
内点罚计算框图
?b?(k),置k=k+1,返回(2)。
.专业.整理.
下载可编辑
程序清单
内点罚函数法程序见附录12
实验结果
运行结果为:
附录1
#include
return x*x*x-2*x+1; }
double Max_Num(double a,double b) {
if(a>b)
.专业.整理.
下载可编辑
return a; else
return b;
}
double Min_Num(double a,double b) {
if(a
return a; else
return b;
}
void StepAdding_Search(double &a,double &b) {
double t[MAX]={0}; double h[MAX]={0}; double f[MAX]={0}; double result=0; double p=2; t[0]=0; h[0]=1; f[0]=fun(t[0]);
for(int k=0;k { t[k+1]=t[k]+h[k]; f[k+1]=fun(t[k+1]); if(f[k+1] { h[k+1]=p*h[k]; result=t[k]; t[k]=t[k+1]; f[k]=f[k+1]; } else if(k == 0) { } else { a=Min_Num(result,t[k+1]); b=Max_Num(result,t[k+1]); } } int main() { } h[k]=-h[k]; result=t[k+1]; .专业.整理.
相关推荐: