当前位置: 首页>Python>正文

apso matlab,APSO算法指導

apso matlab,APSO算法指導

% 改進的快速粒子群優化算法 (APSO):

function apso

Lb=[6 50??0.032??0.040 0.007 0.08 300 ]; %下邊界

Ub=[8 64??0.038??0.050 0.010 0.13 350]; %上邊界

% 默認參數

para=[40 100 0.95]; %[粒子數,迭代次數,gama參數]

% APSO 優化求解函數

[gbest,fmin]=pso_mincon(@result,@constraint,Lb,Ub,para);

% 輸出結果

Bestsolution=gbest % 全局最優個體

fmin

%% 目標函數

function f=result(x)

f=-((1.5*10^(-3)*sin(x(1)*pi()/180))/(((x(7)/((7.5398*10^8)*x(3)*x(5)*sin(pi()*x(1)/180)))*(99.591*x(3))*(1-exp(-3.9*10^(-3)/x(3)))*(sqrt(1+9*(x(6))^2))*(3*10^(-7)+1.2582*10^(-6)*(sin(pi()*x(1)/180)/x(7))^0.3 ))*(54.3914/(25.2340*x(7)*x(6)*x(3)/(sin(x(1)*pi()/180))+32.4657))))

% 非線性約束

function [g,geq]=constraint(x)

% 不等式限制條件

A=tan(x(2)*pi()/180);

B=x(4)*sin(x(1)*pi()/180)-0.1*x(6)*x(3);

C=0.1*x(4)*sin(x(1)*pi()/180)+x(6)*x(3);

D=sin(x(1)*pi()/180)*2*pi()*x(5)*x(3);

R=x(7)/D;

Q=tan(x(1)*pi()/180);

F=B/C

S=x(3)/x(5)

t=54.407/((x(7)*x(6)*x(3)*25.234/sin(x(1)*pi()/180))+32.4657)

g(1)=F-A;

g(2)=R-2.5;

g(3)=x(6)-Q;

g(4)=2.5-S;

g(5)=S-4;

g(6)=0.15-t;

g(7)=t-0.3;

g(8)=50-x(7);

g(9)=x(7)-350;

% 如果沒有等式約束,則置geq=[];

geq=[];

%%??APSO Solver

function [gbest,fbest]=pso_mincon(fhandle,fnonlin,Lb,Ub,para)

if nargin<=7,? ?? ?%用來判定輸入變量的個數

para=[40 200 0.95];

end

n=para(1);% 粒子種群大小

time=para(2); %時間步長,迭代次數

gamma=para(3); %gama參數

scale=abs(Ub-Lb); %取值區間

% 驗證約束條件是否合乎條件

if abs(length(Lb)-length(Ub))>0,

disp('Constraints must have equal size');

return

end

alpha=0.2; % alpha=[0,1]粒子隨機衰減因子

beta=0.5;??% 收斂速度(0->1)=(slow->fast);

% 初始化粒子群

best=init_pso(n,Lb,Ub);

fbest=1.0e+100;

% 迭代開始

for t=1:time,

%尋找全局最優個體

for i=1:n,

fval=Fun(fhandle,fnonlin,best(i,:));

% 更新最有個體

if fval<=fbest,

gbest=best(i,:);

fbest=fval;

end

end

% 隨機性衰減因子

alpha=newPara(alpha,gamma);

% 更新粒子位置

best=pso_move(best,gbest,alpha,beta,Lb,Ub);

% 結果顯示

str=strcat('Best estimates: gbest=',num2str(gbest));

str=strcat(str,'??iteration='); str=strcat(str,num2str(t));

disp(str);

fitness1(t)=fbest;

plot(fitness1,'r','Linewidth',2)

grid on

hold on

title('適應度')

end

% 初始化粒子函數

function [guess]=init_pso(n,Lb,Ub)

ndim=length(Lb);

for i=1:n,

guess(i,1:ndim)=Lb+rand(1,ndim).*(Ub-Lb);

end

%更新所有的粒子 toward (xo,yo)

function ns=pso_move(best,gbest,alpha,beta,Lb,Ub)

% 增加粒子在上下邊界區間內的隨機性

n=size(best,1); ndim=size(best,2);

scale=(Ub-Lb);

for i=1:n,

ns(i,:)=best(i,:)+beta*(gbest-best(i,:))+alpha.*randn(1,ndim).*scale;

end

ns=findrange(ns,Lb,Ub);

% 邊界函數

function ns=findrange(ns,Lb,Ub)

n=length(ns);

for i=1:n,

% 下邊界約束

ns_tmp=ns(i,:);

I=ns_tmp

ns_tmp(I)=Lb(I);

% 上邊界約束

J=ns_tmp>Ub;

ns_tmp(J)=Ub(J);

%更新粒子

ns(i,:)=ns_tmp;

end

% 隨機性衰減因子

function alpha=newPara(alpha,gamma);

alpha=alpha*gamma;

% 帶約束的d維目標函數的求解

function z=Fun(fhandle,fnonlin,u)

% 目標

z=fhandle(u);

z=z+getconstraints(fnonlin,u); % 非線性約束

function Z=getconstraints(fnonlin,u)

% 罰常數 >> 1

PEN=10^15;

lam=PEN; lameq=PEN;

Z=0;

% 非線性約束

[g,geq]=fnonlin(u);

%通過不等式約束建立罰函數

for k=1:length(g),

Z=Z+ lam*g(k)^2*getH(g(k));

end

% 等式條件約束

for k=1:length(geq),

Z=Z+lameq*geq(k)^2*geteqH(geq(k));

end

% Test if inequalities

function H=getH(g)

if g<=0,

H=0;

else

H=1;

end

% Test if equalities hold

function H=geteqH(g)

if g==0,

H=0;

else

H=1;

end

https://www.zydui.com/aff6dVG8FBQ9QClE.html
>

相关文章:

  • macbookpro怎么上外網,mac電腦連接內網和外網的方法(添加路由)
  • 查看oracle數據庫時間,oracle中日期自動補全,沒有數據自動補0
  • dtbo改刷新率,aosp編譯設備樹文件dtbo.img
  • vs code 編譯,超實用~使用 Xcode 編譯 Swift 源碼
  • 學生信息管理系統刪除功能,學生管理系統實現增刪改查
  • 簡述android源代碼的編譯過程,Android 編譯過程介紹,Android.mk 和 Android.bp 分析, 在源碼中編譯 AndroidStudi
  • 獲取通訊錄源碼,web通訊錄之通訊錄主界面
  • 回歸問題屬于什么問題,分類和回歸問題
  • vue iframe跨域,Vue3.0中WangEditor本地上傳圖片(解決跨域問題,后端返回問題)
  • springboot有哪些組件,使用IDEA開發springboot多module模塊項目的配置文件的共享讀取問題
  • 設計模式的優點是什么,設計模式的理解與舉例
  • 深度學習中的Benchmark,Baseline,Backbone和SOTA的比較說明舉例分析
  • 什么是XSS攻擊,Web 安全之 XSS 攻擊原理/分類/防御 詳解
  • miui11已適配機型,適配 iOS 12
  • 蘋果6s怎么更新ios13,蘋果 iOS 12.5.3 正式版發布
  • 微信自動發朋友圈,微信如何定時發送朋友圈?
  • 可以定時發朋友圈嗎,微信能不能定時發朋友圈 ?
  • windows2022數據中心版,Windows Server 2022
  • windows server core,Windows Service和Worker Service
  • 華為校園實習生招聘總結與感悟
  • 2018年華為實習生招聘三道編程題
  • hp8470p更換固態硬盤教程,HP 3PAR 8440存儲更換故障硬盤
  • 某存儲器芯片地址線為12,1. 若某存儲器芯片有地址線16條、數據線8條,則該芯片的存儲容量是( )位。————計算機組成原理
  • 計算存儲器芯片,構成地址40000000H到400FFFFFH且按字節編址的內存區域
  • 存儲器芯片的地址范圍,02.各類存儲器芯片和內存地址空間
  • 計劃的特點,任務計劃列表
  • 太陽輻射游戲任務攻略,游戲做任務的基本流程
  • 直接試玩游戲,游戲中任務的探討
  • echarts自定義圖例,【Android -- 開源庫】圖表繪制 HelloCharts 的基本使用
  • python圖表分析,Python模塊之chardir: 使用chartdir生成各種圖表