急求运筹学单纯型法的matlab程序代码!!

发布网友 发布时间:2022-04-23 14:30

我来回答

1个回答

热心网友 时间:2023-05-29 20:36

来自搜索
function [opt_X,opt_S]=Simplexe2(fhandle,X_0,n,lambda,mu,h,epsiro,K)
%:单纯形加速法(教学版)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 参考文献:
% 林明芳,张宝生等.汽车优化设计.吉林科学技术出版社,1991.P61-67
% Write By coldstar@126.com 2005.9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Input:
% -fhandle 函数句柄
% -X_0 n维初始列向量
% -n 维数
% -lambda 步长压缩系数!=0.5 (0 1)
% -mu 步长加大系数>1
% -h 单纯形边长
% -epsiro 精度
% -K 最大寻优次数
% Output:
% -opt_X 最优值点
% -opt_S 最优值
% Example:
% >>f3=inline('60-10*x(1)-4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)');
% >>Simplexe2(f3,[0;0],2,0.618,2,2,0.001,20)
% >>fminsearch(f3,[0;0])

SearchTime=1;
%:初始单纯形
X=repmat(X_0,1,n)+h*eye(n);
X=[X_0,X];
%:初始化S,单纯形各点处函数值
S=inf(1,n);
for i=1:n+1
S(i)=Getfval(fhandle,X(:,i));
end
%:初始化SH,SG,SL,(最差点,次差点,最好点)
[SH,SG,SL,iXH,iXG,iXL]=GetShgl(S);
%:单纯性搜索寻优
while abs(SH-SL)>=epsiro*abs(SL) %按精度收敛
%:寻找反射线上最优点XS,SS
XR=GetXR(X,X(:,iXH));
SR=Getfval(fhandle,XR);
if SR>=SG%:步长压缩
XS=(1-lambda)*X(:,iXH)+lambda*XR;
SS=Getfval(fhandle,XS);
if SS>=SG %:单纯形收缩
for i=1:n+1
X(:,i)=(X(:,iXL)+X(:,i))/2;
end
end
elseif ((1-mu)*SH+mu*SR)<SL %:步长加大
XE=(1-mu)*X(:,iXH)+mu*XR;
SE=Getfval(fhandle,XE);
if SE<SR
XS=XE; SS=SE;
else
XS=XR; SS=SR;
end
else
XS=XR; SS=SR;
end
%:以寻优点XS替代最坏点XH,构成新单纯形
X(:,iXH)=XS; S(iXH)=SS;
%:重置XH,XG,XL,
[SH,SG,SL,iXH,iXG,iXL]=GetShgl(S);
%:迭代计数
SearchTime=SearchTime+1;
if SearchTime>K break; end %超过最大次数
end
%:返回并显示寻优结果
opt_X=X(:,iXL);opt_S=SL;
fprintf(1,'单纯形法 经%d次搜索:\n',SearchTime);
disp('最优点为'); disp(opt_X);
disp('最优点处目标函数值为'); disp(opt_S);

%-------------------------------
function fval=Getfval(fhandle,X)
%:求*函数值
fval=feval(fhandle,X');
%-------------------------------
function [SH,SG,SL,iXH,iXG,iXL]=GetShgl(S)
%:求目标函数最大值SH,次大值SG,最小值SL,及其X对应列的位置
[SH,iXH]=max(S);
[SL,iXL]=min(S);
S(:,iXH)=[];
[SG,iXG]=max(S);
if iXH<=iXG
iXG=iXG+1;
end
%-------------------------------
function XR=GetXR(X,XH)
%:计算反射点
n=length(XH);
XR=zeros(n,1);
for i=1:n+1
XR=XR+X(:,i);
end
XR=2*(XR-XH)/n-XH;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com