图片缩略图

约束粒子群优化

版本1.31.4 (40.6 KB)由 山姆
PSO算法的实现与遗传算法工具箱的语法相同。

182下载

更新11月5日

从GitHub

查看版本历史

在GitHub上查看许可证

先前标题为“另一个粒子群工具箱”

介绍
粒子群优化(PSO)是一种无导数全局最优求解方法。它的灵感来自于大型简单动物群体令人惊讶的有组织的行为,如鸟群、鱼群或蝗虫群。该算法中的单个生物或“粒子”是原始的,只知道四件简单的事情:1 & 2)它们自己在搜索空间中的当前位置和适应度值,3)它们之前的个人最佳位置,以及4)“群”中所有粒子发现的总体最佳位置。没有梯度或黑森来计算。每个粒子基于这些信息在搜索空间中不断调整其速度和轨迹,每次迭代都更接近全局最优。就像在自然界中看到的那样,尽管这个计算群的单个粒子很简单,但它显示出了惊人的一致性和协调水平。

易用性
如果您已经在使用MATLAB的全局优化工具箱中包含的遗传算法(GA),那么这个PSO工具箱将为您节省大量时间。可以使用与GA相同的语法从MATLAB命令行调用它,并使用一些特定于PSO的附加选项。这将允许PSO工具箱和GA工具箱之间高度的代码可重用性。某些特定于ga的参数,如交叉和突变函数,显然不适用于PSO算法。然而,遗传算法工具箱的许多常用选项可以与PSO互换使用,因为它们都是迭代的基于种群的求解器。详细信息请参见>> help pso(来自。/ popt目录)。

特性
*使金宝app用MATLAB的并行计算工具箱支持分布式计算。
*完全支持有界金宝app、线性和非线性约束。
*模块化和可定制。
*二进制优化。详见PSOBINARY函数。
*向量化适应度函数。
*求解器参数控制使用'选项'结构类似于现有的MATLAB优化求解器。
*用户定义的自定义绘图可以使用与GA绘图函数相同的模板来编写。
*另一个优化求解器可能被称为“混合函数”,以细化PSO结果。

其中包括一个演示函数,以及一个小型测试函数库。要运行演示,从popt目录调用>> psodemo,不输入或输出。

欢迎提交Bug报告和特性请求。

特别感谢以下人员贡献的代码和错误修复:
*香港大学的Ben Xin Kang
汉诺威大学的克里斯蒂安·汉森
* Erik Schreurs来自MATLAB Central社区
杨百翰大学的J. Oliver
* IRIS工具箱的Michael Johnston
*陈自强(凯文)

参考书目
*史永华,史永华,史永华。群体智慧。文献出版社,2001。
*粒子群优化。http://en.wikipedia.org/wiki/Particle_swarm_optimization
* RE Perez, K Behdinan。粒子群方法在结构优化设计中的应用。计算机与结构85(2007)1579-1588。
* SM Mikki, AA Kishk。粒子群优化:基于物理的方法。Morgan & Claypool, 2008。

附录一
c(x)≤0形式的非线性不等式约束和ceq(x) = 0形式的非线性不等式约束现在已经完全实现。“惩罚”约束边界强制方法现在是默认的。它经过了重新设计和广泛的测试,应该可以与所有类型的约束一起工作。

有关定义非线性约束函数的正确语法,请参阅以下文档://www.tatmou.com/help/optim/ug/writing-constraints.html#brhkghv-16
要查看使用Rosenbrock函数上覆盖的四叶函数来演示非线性不等式约束,请运行PSODEMO并选择“非线性构造函数”作为测试函数。

附录B
请参阅GA工具箱文档中的以下指南,以开始使用并行计算工具箱。
//www.tatmou.com/help/gads/genetic-algorithm-options.html#f17234

附录C
如果你刚刚开始学习,希望学会在工作或学习中使用这个工具箱,这里有一些必要的阅读:
* MATLAB的优化工具箱://www.tatmou.com/help/optim/index.html
* MATLAB的全局优化工具箱://www.tatmou.com/help/gads/index.html
* MATLAB遗传算法://www.tatmou.com/help/gads/genetic-algorithm.html

附录D
现在有一个粒子群优化器包括在全局优化工具箱中。如果安装了最新版本的全局优化工具箱,则需要在代码中适当地设置路径以使用此工具箱。

引用作为

陈。约束粒子群优化(2009-2018)。MATLAB文件交换。//www.tatmou.com/matlabcentral/fileexchange/25986。

意见及评分(251

扎卡里亚bellahcene

问题
pso错误(第429行)
state.Score(i) = fitnessfcn(state.Population(i,:));

李曾

Kumudua

嗨,山姆
谢谢你为整理这些所做的努力。当我在我的代码中运行这个时,它不会比(找到初始可行位置)前进更多。我下载了1.31.4版本,我想知道这个问题是否已经修复了。无论如何,代码并没有从“找到可行的初始位置”进一步发展。你能给点建议吗?

Iurii Kazantcev

枝枝刘

嗨,山姆
非常感谢你的程序,但是,我的模型有一个问题,它没有前进超过(找到初始可行位置),需要帮助如何添加初始位置,并协助算法正常运行。

嗨,山姆,谢谢你的出色工作,请,我们如何确定pso中评估的下一个点,我的意思是贝叶斯优化中的获取函数。

力平任

为什么我添加这个工具箱老是失败

Nayan Rawat

使用了哪些不同的选项?

无法从Get-add-on选项安装此工具箱。有人能建议如何安装这个包吗?

帅黄

xiangyue王

安娜

嘿,山姆,就像凯文在2017年10月21日写的那样,我也是,我在寻找你的代码处理整数/离散输入的可能性。你是否希望在未来的版本中加入这些内容?对于Matlab“ga”,他们用以下方法求解:https://de.mathworks.com/help/gads/solving-a-mixed-integer-engineering-design-problem-using-the-genetic-algorithm.html#d117e19907(滚动到“添加离散非整数变量约束”)。非常感谢!

金斯利酷

根据我的观察,当被绑定的约束被违反时,修改'ConstrBoundary'默认值而不是'惩罚'将解决问题。尽管有小漏洞,但它是一个强大的工具箱!

景汇汉

景汇汉

> >明确
>> fun = @(x) x(1)²+x(2)²+x(3)²+x(4)²

有趣的=

包含以下值的function_handle:

@ (x) x (1) ^ 2 + (2) ^ 2 + x (3) ^ 2 + x (4) ^ 2

> > y = pso(有趣,4 , [], [], [ 1 1 1 1], [100], [0 0 0 0], [])

大量的……

适应度函数值在50代后没有改善,51代后最大约束违反小于1e-06。

最终最佳点:[0 00 100]
========================================================================
如何解决这个问题?谢谢。

景汇汉

如何解决这个问题?谢谢。

罗德尼Ngone

干得好!然而,我确实同意Allen Hu的观察,即约束约束有时会被违反。你能解决这个吗?

艾伦胡

亲爱的山姆。
这段代码有时似乎违反了约束。如何修复这个bug?

山姆

修复了在检查有效的混合函数时无法正确检测到fmincon的错误。感谢来自德国的Martin Hallmann指出这一点。
此外,感谢Luis Salinas San Martin和“M B”指出了之前关于总体初始化的错误。

山姆

我一直忙于医学训练。在今天的版本中,以下描述的与填充初始化相关的错误已被修复。

当使用非线性约束时,它会发出下面两个评论者(luis salinas和M B)所发出的错误信号。请修复,或提供修复指南。

liruixin liruixin

liruixin liruixin

不能处理约束

kaiheng唱

张博文

我试图使用这个工具箱来解决以下问题:
fitnessfcn = @ (x) (10 * x (: 1) + 15 * x (:, 2) + 20 * x (:, 3) + 0 * (:, 4) + 0 * x (:, 5) + 0 * x (:, 6));
Nvars = 6;
LB=[0;0;0;0;-2*pi;-2*pi];
乌兰巴托= [0.20;0.19;0.05;0;2π*;2 *π);
Aineq = [0 0 0 1 -1 0;0 0 0 -1 1 0;0 0 0 0 1 -1;0 0 0 0 -1 1;0 0 0 1 0 -1;0 0 0 -1 0 1];;结束
Bineq = [1.25*0.2;1.25 * 0.2;2 * 0.25;2 * 0.25;1.25 * 0.4;1.25 * 0.4);结束
Aeq = [1 0 0 1.5 -1 -0.5;0 1 0 -1 4 -3;0 0 1 -0.5 -3 3.5];结束
Beq = [0.10;0.10;0.15]

当运行代码时,我得到以下错误消息:

使用optimset时出错(第249行)
无法识别的参数名称“Simplex”。请参阅
在文档中的选项表中列出
可接受的选项参数。注意有些
参数仅由OPTIMOPTIONS支持。金宝app链接到
选择表

psocheckinitialpopulation错误(第25行)
状态。LinprogOptions =
optimset(“单纯”,“关闭”,…

pso错误(第338行)
状态,选择=
psocheckinitialpopulation(状态,…

我能做什么来避免错误信息和解决我的最小化问题使用pso ?

乔压力

如何在粒子群优化中使用非线性等式约束?

启动demo并选择非线性构造函数时出错
-----
使用optimset时出错(第249行)
无法识别的参数名称“Simplex”。的列表,请参阅文档中的选项表
可接受的选项参数。注意,有些参数仅由OPTIMOPTIONS支持。金宝app链接到
选择表

psocheckinitialpopulation错误(第25行)
状态。LinprogOptions = optimset('Simplex','off',…

pso错误(第338行)
[state,options] = psocheckinitialpopulation(state,…

psodemo错误(第72行)
pso(问题)
----------------
编辑器中的代码检查器在“psocheckinitialpopulation”中显示一个“红色”错误。m': 'Simplex已被删除。使用“内点”或“双单形”代替。

释放了陈

这是一份很棒的工作。用在我的问题上很容易。

但也有一些缺点。当决策变量较多时,为了得到更好的结果,需要更大的总体,这大大减慢了计算速度。在我们的计算中,我们有20个决策变量,并将populationSize设置为2000,它需要超过20个。

是否熟悉GPU加速算法?如果使用基于cuda的加速方法,我认为计算速度会大大提高。

希望Sam可以允许其他人修改这个工具箱,这样可以让质量提高的更快。

丹尼

继续之前检查边界
% ---------------------------------------------------------------------
如果~ ([isempty ([Aineq bineq]), isempty ([Aeq,说真的]),…
(磅;乌兰巴托)isempty (), isempty (nonlcon)))
state = boundcheckfcn(state,Aineq,bineq,Aeq,beq,LB,UB,nonlcon,…
选项);
如果~为空,结束%
% ---------------------------------------------------------------------

%----------由尹林飞补充
i = 1: n
state.Population(我,(state.Population(我,:)<磅))=磅(state.Population(我,:)<磅);
state.Population(我,(state.Population(我:)>乌兰巴托))=乌兰巴托(state.Population(我:)>乌兰巴托);
结束
%----------由尹林飞补充

大卫·范教授

Mugheera马利克

先生,你能告诉我如何在Pso中加入约束吗??

Ruby Bhatt

嗨,山姆,

你用矩阵算法做过粒子群优化吗??如果某些工作正在朝着这个方向进行,请分享代码!!!!!!谢谢……

沙赫扎德hameed

彼得。彼得

米勒克萨

亲爱的山姆。
我有一个问题时运行psodemo。我得到以下错误:
输入参数不够。
我怎么解呢?

mingzhi陈

非常感谢

Mohammad Reza Mirzaei

非常感谢

凯文

在全局优化工具箱中,' ga '算法可以处理一小部分['混合整数非线性优化问题',](//www.tatmou.com/help/gads/mixed-integer-optimization.html).如果可能,你是否可以在未来的计划列表中加入这样的功能?谢谢你!

Hanis纳西尔

waq

Le ducdao

亲爱的山姆。
你能告诉我如何用你的粒子群算法来解决最大化问题吗

菁李

嗨,山姆,
谢谢你的节目。但是当我使用它的时候有一些问题。在计算过程中,只有初始粒子满足线性约束。但位置更新后,粒子不再满足线性约束。在程序中,没有任何方法来解决这个问题。

EP

为什么这需要优化工具箱?我正在寻找不需要任何工具箱的第三方Matlab代码,这样我就可以用启发式(如PSO或GA)解决问题,而不必购买优化工具箱。

顾曰

如何使用这个程序。
它有典型的问题结构吗?我已经阅读了所有的帮助文件和演示,但我仍然不知道如何设置我的问题。问题的结构是什么?
即使是演示也不能执行。
这个错误“下标索引必须是实正整数或逻辑。”在Matlab中总是返回。
x = [0 0);
Nvars = 2;
Lb = [-1.5,-2];
Ub = [2,2];
适应度fcn = 100*(x(2)-x(1)²)²+(1-x(1))²;
选项。PopInitRange = [[-2;4],[-1;2]];

选项。PlotFcns = {@psoplotbestf,@psoplotswarmsurf};
选项。代数= 200;
选项。DemoMode = 'on';
选项。KnownMin = [1 1];
选项。OutputFcns = {};
选项。ConstrBoundary = '惩罚';
选项。UseParallel = 'never';
options.PopulationSize = 40;
[x,fval] = pso(fitnessfcn,nvars);

玛利亚姆elloumi

亲爱的山姆!
非常感谢您提供非常好的优化工具箱。
在我的优化问题中,我有4个优化参数。我想用代来画(代vs var(1),代vs var(2),代vs var(3)等等)。另外,我想用生成来绘制最佳适应度值。你能帮我吗?
谢谢

reza dd

嗨,山姆
我试着在matlab 9.2上运行这个,但它发送了这个错误

使用optimset时出错(第245行)
Simplex已被移除。使用其他LINPROG选项代替。

psocheckinitialpopulation错误(第26行)
状态。LinprogOptions = optimset('Simplex','off',…

我该怎么解决?!

谢谢

马丁Hallmann

嘿,山姆,多么棒的工作!!我在杂交上也遇到了同样的问题,正如Kyriaki报告的那样。在MATLAB v2014a中可以找到fmincon求解器,但在新版本中出现错误,因为“exist”函数无法检测到它。对于模式搜索一切都很好,使用GA和fmincon也可以。你知道为什么PSO工具箱不能调用fmincon求解器吗?

来自德国的感谢和良好的问候!

艾哈迈德abdulsahib

你的代码在哪里?我没有找到它

JiaJun锅

周kangpeng

杨xk

我正在学习。

山姆

在过去的一年里积累了很多问题,抱歉我没有时间回答。

我很久没用过遗传算法了,我相信它已经被改变了。让我知道有什么不同。

Rabin和Dilip:我不能实现多目标优化。外科医生的培训现在占据了我所有的时间。

geneva:我相信有一种方法可以使用psooptimset来设置初始人口,以生成一个选项结构,然后传递给pso函数。这对你没用吗?

潘:我再看一遍。它计算的是在给定代数内的适应度的平均改善。分母应该是选项。StallGenLimit代替(k - options.StallGenLimit)。

Kyriaki:你是否换了电脑或者安装了没有优化工具箱的新的MATLAB版本?我把错误消息放在那里,以防在命名空间中找不到fmincon函数(它包含在优化工具箱中)。

sky miko:我认为你的错误可能和上面提到的潘的发现有关。一旦我设法安装了新版本的MATLAB,我就会进行更改。

alicewithrabbit

你好,山姆,我认为fitnessFun的句柄语法不同于GA工具箱时fitnessFun不是一个。

库恩王

拉宾

嗨,山姆

moltiobjective吗?

genevois皮埃尔

您好,为什么初始总体不能设置?

迪利普·库马尔·罗伊

嗨,山姆,谢谢你这么好的代码。您是否计划将此代码用于多目标问题设置?

再次感谢。

嗨,山姆,

感谢您创建这个美妙的PSO工具箱,它非常有用,功能强大且易于实现。

最近我在pso文件中发现了一个错别字。在该文件的第486行,检查改进的代码如下:
Imprvchk = k >选项。StallGenLimit &&…
(状态。fGlobalBest(k - options.StallGenLimit)…
state.fGlobalBest(k)) / (k - options.StallGenLimit) <…
选项。TolFun;

我怀疑分母(k - options.StallGenLimit)应该是状态。fGlobalBest(k - options.StallGenLimit)。

请告诉我我的理解是否正确。谢谢你!

Kyriaki Kostoglou

完美的。Hybrid函数以前工作,但现在它显示以下msg:
“找不到混合函数fmincon。检查工具箱”

嗨,sam,我想求整数空间的最优解。如何使用这个程序?

赫德程

马克

你好,

我的代码并没有从“寻找可行的初始位置……”

Lb =[-0.4143 -0.4143 -0.4143];
Ub =[0.4143 0.4143 0.4143];
= (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
b = [1.0356; 1.0356; 1.0356; 1.0356; 1.0356; 1.0356; 1.0356; 1.0356);

[rt, fval] = pso (@funexplore 3 A、b[],[],磅,乌兰巴托);

谢谢你的宝贵时间!

天空巫女

嗨,山姆
需要你的帮助!!!!!!
如何设置MaxIter?
选择= statset(麦克斯特,10000);
[x, fval exitflag、输出人口,分数)= pso (@diertimubiao 3 ,[],[],[],[], 磅,乌兰巴托,[]选项);

大量的……||和&&操作符的操作数必须转换为逻辑标量值。

pso错误(第486行)
Imprvchk = k >选项。StallGenLimit &&…

dierti错误(第10行)
[x, fval exitflag、输出人口,分数)= pso (@diertimubiao 3 ,[],[],[],[], 磅,乌兰巴托,[]选项);

天空巫女

嗨,山姆,
当我用你的pso工具箱来解决一个问题时,它找不到任何答案。而当我使用ga box或fmincon来处理这个问题时,它会给我一些不稳定的答案。你处理非线性问题的方法是否错误?

马蒂亚斯

这个程序实际上非常有用。

但也有一些事情没有正确执行(在我看来)。

例如,当你有线性不等式约束时,算法是这样的:
1)在下界和上界内创建均匀分布。
2)找出违反约束的粒子
3)在有效区域的最近边界上移动该粒子。

这不会导致一个均匀分布的起始种群!
因为,根据不等式约束,边界上有或多或少的粒子。

另一个问题是,如果有不等式约束,反射模式就不起作用。
如果你没有不等式约束,它也可以工作,但不是正确的(冲击点的计算不正确)。

所以我认为关于“约束特性”还有一些可以改进的地方。特别是因为“受限”一词是该程序名称的一部分

杰基朱

看不懂啊

阿玛尼mahdy

亲爱的山姆。

顺便说一句,非常感谢。但我有一个问题。如果变量x包含一些整数或二进制值和连续值呢?代码处理这个问题了吗?

+我们如何实现非线性约束..我的意思是,如果我有x(1)*x(2)=5,那么nonlcon= x(1)*x(2)-5 ?

非常感谢<3<3<#

genevois皮埃尔

嗨,我使用非线性约束的粒子群。在第一次测试中,它没有运行,然后我在状态中替换了它。LinprogOptions算法通过sqp,它通过这一步到另一个错误使用psocheckpopulationinitrange;我可以把我的目标和约束函数发给你吗?他们毫无问题地“通过”ga

mohsen ebi

你好,我想增加参数的数量,但我不能,请帮助我
这就是浮现

pjpgy123

亲爱的山姆:
我是一名来自中国的学生,我在HHU大学学习。我想说你的程序对我很有用!但是我有一个问题,如果你能帮我解决就太感激了。
在我的例子中,我需要使用线性约束和线性等式约束。特别是对于线性约束,我使用a*x-c来代替c由于约束条件,问题是不可行的
出错pso(第338行)
[state,options] = psocheckinitialpopulation(state,…"。然而,如果我运行代码为第二,第三,第四…结果可能是随机的。

此外,提示“警告:'active-set'算法将在未来的版本中被删除。要避免此警告或未来的错误,请选择不同的算法:
'内点'或'双单形'。

>在linprog, 366
在sdnchen-psomatlab-b4c4a1e\private\psocheckinitialpopulation中的41
在338处
在runpso的94 "中出现了这么多次,你知道为什么吗?
期待您的回复!
我的邮箱地址是pjpgy123@gmail.com。
你的!

Gabriele卢宾

它不起作用

Orcun侯尔

你好,
我试着用单变量运行PSO,但是代码每次都找到不同的最优。另一个问题是我的设计变量不尊重下界和上界。
请帮忙:)

山姆

嗨,Monique,我以前见过用离散变量做的粒子群优化,但我没有时间在我的实验中实现它。我已经有好几年没有研究这个问题了,我得把描述它的那篇论文翻出来。

Monique赞美上帝

嗨,山姆,有办法使用pso吗?M,但是只有整数变量?

谢谢!

山姆

有趣的是,他们似乎对代码做了一些修改,并改进了文档,但我确实认为其中很大一部分是我的。

开源许可证鼓励人们这样做,虽然我很感激他们出于职业礼貌没有从文档中删除我的名字,但许可证中并没有规定他们必须这样做。也没有什么可以阻止我将他们的改进合并到我自己的代码中。

谢谢你的提醒!

工作的狼

Rejeki谭布

早上好,先生
我想使用这个程序来获得最佳的位置和大小分布式发电在配电系统..
有人能帮帮我吗?

问候,
Rejeki谭布

SARANSH AGRAWAL

先生,

我正在寻找psomultiobjective,请指导我如何使用psomultiobjective工具箱。
的问候。

Zhaoyi

你好山姆,

非常感谢你的“另一个粒子群工具箱”,这正是我正在寻找的。然而,在使用工具箱时,我有几个问题。
1.在MATLAB 2015a中,不能再使用“matlabpool”命令。中方是否有最新进展?
2.当我设置'Display', 'diagnose'时,我无法在命令窗口中看到每次迭代的信息。我怎样才能正确地设置它,以便获得每一代的信息?
3.MATLAB也发布了一个粒子群工具箱,但是没有约束。我真的很欣赏你在约束粒子群算法方面的工作。然而,我无法在你的和MATLAB的PSO工具箱之间获得相同的收敛速度,即使我没有约束,并且都使用默认设置。我不确定我是否设置错误……

非常感谢!
非常感谢您的巨大贡献。

最好的问候,

Ahmadullah汗

粒子群优化算法中最佳得分和最佳得分是什么意思。

我联系你是想问一下我的适应度函数。希望得到一个肯定的答案。:)

应该Broekmans

应该Broekmans

Sampada

如何在视频中使用此工具箱进行对象检测和跟踪?有什么现成的程序吗?可用同样的PSO?Pl.帮助

剑郭

谢谢楼主分享。

玛丽亚Esmeral

早上好,

我想知道我是否需要优化工具箱来使用pso。m函数?

谢谢你的帮助

阿南德

亲爱的山姆!
非常感谢您提供非常好的优化工具箱。
在我的优化问题中,我有4个优化参数。我想用代(代vs var(1),代vs var(2),代vs var(3)等…)

鹅膏

ZhG

我在你的评论中发现了一些东西。2013年5月15日

“我还做了一个小改变,以确保在使用基于惩罚的约束执行方法时,只选择可行的解决方案作为全局最优。”金宝搏官方网站

这是什么意思?我们能在所有迭代中得到一个相对最优的结果吗?有这类应用的例子吗?或者只是设置选项。ConstrBoundary = '惩罚' ?谢谢。

ZhG

还有一个关于人口规模和世代的问题。我把这个值赋给了这两个变量。
f.option.PopulationSize = 500000;% GA相同。
f.options.Generations = 1000;

但我总是得到这样的结果:
rt2 =

X: [1.8990 0.9206 2.0019 -0.3474 -0.0901]
fval: -1.2477
exitflag: 3
输出:[1x1结构]
人口:[40x5 double]
分数:[40x1 double]
数据a1: [50x5 double]
Real_v: [1x50 double]

总体维度为40*5。
我这样调用这个函数:

Fitnessfcn = str2func('mytest');
选项= fitnessfcn('init');

Issue1 = options;

通常,健身fcn =健身fcn;
通常,Nvars = 5;
issue1.options。DemoMode = 'fast';

[x,fval,exitflag,output,population,scores] = pso(issue1);

ZhG

我解决了这个问题。
关于目标函数还有一个愚蠢的问题。不管怎样,可能我没有理解正确,因为我一直在用GA。在遗传算法中,它总是生成目标函数的最大值。但是,在PSO中,我如何得到最大值或最小值。我是否需要指定一些约束参数,如Aineq bineq什么的?有人帮助吗?谢谢。

ZhG

你好,

工具箱是否适用于变量大于2的问题?
例如,我想实现这样的东西
Y = a1*x1 + a2*x2 +…+一个* xn
N >= 5
在我的问题中,我需要通过优化第一个方程来找出几个系数。这意味着我有n个变量。要做到这一点,我还需要找出n个系数。但我有个关于你工具箱的问题。我已经用我的代码发邮件给你了。谢谢。

阿布

Molong段

山姆

斯蒂芬,

Psoplotswarm是指在三维轴上绘制粒子位置。我在PSODEMO文件中使用它,以便更容易地可视化swarm的行为。IIRC ijk变量是一个3元素数组,你可以在其中指定你想要绘制问题的哪个维度(例如,如果你有一个12维的问题,你想要在3D图上沿第4维、第7维和第11维绘制粒子位置)。

山姆

psoplotswarm的ijk参数(options,state,flag,ijk)是什么意思?psoplotswarm()打算绘制什么?

作为进一步的背景,我使用psobinary()来优化一个二维数组(网络的邻接矩阵)。

Zed

嗨,山姆,

很棒的工具,我一直在使用2010版,没有任何问题。刚刚更新到最新版本20140330,但发现我的上/下界LB/UB现在不知何方式被忽略了。我注意到Erik和下面的其他人提出了这个问题,你似乎表示这个问题已经解决了。在这个版本中修复了吗?这个bug很严重,因为我的LB是正的,但PSO却误入负值。希望这个问题能尽快解决。我正在运行8.0.0.783 (R2012b)。

谢谢。

math_network

约束处理怎么样?

math_network

亲爱的山姆,
感谢强大的pso工具箱。那粒子群算法的技术信息呢,比如粒子群算法。
需要一份关于粒子群优化工具箱与Matlab使用的文档。

山姆

嗨parinya,

你能通过联系作者链接给我发一份你的非线性约束函数吗?我来看看。

山姆

parinya

亲爱的山姆,

感谢强大的pso工具箱。我有一个错误后运行的代码与非线性约束。错误信息是:
"由于非线性约束问题是不可行的"

我已经检查了我的非线性约束是否通过了我提供的初始总体。有什么地方可以解决这个问题呢?

谢谢

Parinya

山姆

谢谢你指出这一点,阿曼。

B应该是一个列向量[2;1],这样它就适合这个方程

[10;0 1] * [x1;X2]≤[2;1]

然而,看起来GA足够健壮,可以检查和纠正错误。

我将在下一个版本中添加一小段输入检查代码,这样PSO将产生与GA相同的行为。

埃里克

山姆,没问题。

阿曼Parkash

Sam,如果PSO工具箱语法与GA工具箱相同,那么我发现了一个小错误(但不是GA如果使用相同的syanx)例如:如果我比较n,运行两个GA n PSO语法的两个变量目标函数....pso(@(x)(x(1)^2+x(2)^2+x(1)),2,[1 0;0 1],[2 1])显示“hozcat”和“psocheckinitialpopulation”错误
…但ga (@ (x) x (x (1) ^ 2 + (2) ^ 2 + x(1)), 2,[1 0; 0 1],[2 1])结果出来

山姆

阿曼,我很高兴你的问题现在正常工作了。很抱歉给您带来不便!埃里克,非常欢迎你;我可以把你的名字加到工具箱的致谢名单里吗?

阿曼Parkash

Erik,Sam谢谢你告诉我们修复这个bug....现在我所有的结果都在范围内。

阿曼Parkash

意味着尽管给出了正范围内的边界,但一些结果超出了范围,即负的....

埃里克

Sam,谢谢你这么快就修复了这个bug !

山姆

Erik,我在PSO的一个帮助函数中发现了一个拼写错误,这导致了你所描述的错误。我已经提交了一份更新,应该会在接下来的几天出现。对于那些在优化问题中使用下限和上限约束的人来说,这也可以提高性能。

山姆

kerolos,有一个选项使用二进制输入(调用PSOBINARY而不是PSO),但我还没有实现任何整数输入。

埃里克,这是非常奇怪的行为,我得到了和你一样的结果。更奇怪的是,如果我把LB设为小于1,结果是负的。我将不得不做一些调试来弄清这一点。

克里斯蒂娜,抱歉这么久才回你电话。我之前没有试过用帕累托front来编程,所以我对你们的问题没有太大帮助。如果时间允许,我将研究开发这个工具箱的多目标版本,但我不能做出任何保证,因为医学院目前有其他职责要我参加。如果你找到了让它工作的方法,请告诉我!

Matthias,这种行为是PSO算法没有保留每一代的最佳点的结果(不像遗传算法那样)。我上面提到的Kennedy等人的书中提出的算法不包括这种精英保护行为,因此我把它从我的代码中去掉,以保持对他们的代码的忠诚。理想情况下,蜂群会稳定在一个接近全球最大值的区域,所以大多数时候这不是问题。如果你得到的历史最佳点和最终最佳点之间的值相差很大,那么蜂群很可能在找到稳定的平衡之前就已经终止了,我不会依赖这些结果。如果差异在很小的误差范围内,那么您可以选择接受哪个结果。

医生说Wanjale

医生说Wanjale

医生说Wanjale

医生说Wanjale

kerolos

谢谢

这很有效;

我可以使用任何选项在四维空间中输入整数吗

谢谢

山姆

kerolos,尝试将LB设置为[0,0,0,0],将UB设置为[1,1,1,1],并避免完全使用线性约束。

kerolos

谢谢你的工具箱

我需要一些帮助,使用这个工具箱来优化一个四维问题

我想要一个Aeq和beq的例子

为了满足所有4维值都在0到1之间的约束

我试过了
% = [1, 1, 1, 1, 1, 1, 1, 1), b = [1, 0, 1, 0, 1, 0, 1, 0]
% = [1, 1, 1, 1, 1, 1, 1), b = [1 1 1 1 0, 0, 0, 0)

但运气不好

使用horzcat出错
被连接的矩阵维度不一致。

psocheckinitialpopulation错误(第36行)
if (~isempty([Aineq,bineq]) &&
any(Aineq*state.Population(i,:)' - bineq >
options.TolCon))…

pso错误(第338行)
[state,options] = psocheckinitialpopulation(state,…

我读了帮助

% x = pso(fitnessfcn,nvars,Aineq,bineq)
%线性约束,如Aineq*x <= bineq。Aineq是一个大小矩阵
% n约束x nvars,而b是长度为nvars的列向量。
%

不能很好地理解

谢谢。

kerolos

埃里克

嗨,山姆。谢谢这个伟大的功能。我相信我发现了一个小bug。如果我试着找出1/x函数在1到10之间的最小值:
pso (@ (x) 1 / x, 1 ,[],[],[],[], 1, 10)
它返回x = 1。当我将边界设置为1.01和10时:
pso (@ (x) 1 / x, 1 ,[],[],],[], 1.01, 10)
最小值在x = 10处。

克里斯蒂娜

嗨,山姆,谢谢你的工具箱!我试图修改代码,以获得一个多目标优化器,通过适应度的自适应加权和方法。为了写出帕累托点,我要怎么写代码呢?每代写k

k = 2: itr

如果k > = 2
% trypareto = (state.obj1 (k) < state.obj1 (1: (k - 1))) & (state.obj2 (k) < state.obj2 (1: (k - 1)));

%%%%%%%%%%%%%%%%%%%%%%%%
% if trypareto
paretobiet1 (k) = state.obj1 (k);
paretobiet2 (k) = state.obj2 (k);
paretofronte = [paretobiet1, paretobiet2];

结束
结束

但它不太好用,因为它写出了相等的点。有人有什么建议吗?谢谢大家。
克里斯蒂娜

龙岩

嗨,山姆。我现在使用粒子群算法作为工具来最小化适应度函数。实际上,我正在使用二进制编码的适应度函数,我已经运行它与GA之前,它工作得很好。然而,当我使用你的二进制PSO来计算相同的函数时,它在每一代中的最佳值就像随机值一样,没有逐渐下降或至少有最小化的迹象。我想知道为什么会这样。二进制编码对我的情况很好,因为它在GA中工作得很好。你会如此善良地回答我这个问题,或者我会张贴细节,如果你需要解决我的麻烦。希望尽快得到你的回复。

马蒂亚斯

你好,

我认为我发现了一个关键的错误(版本20130702):在我的程序中,如果它们比之前的迭代更适合,我就会写下测试参数。在我的测试中,PSO在满足中断条件后停止,并给了我一个最终参数集,它比我之前写下的中间结果更适合。

sakthi priya

嗨,山姆
非常感谢你的密码。我想知道我们可以给电路网表作为输入。

山姆

Aman Parkash,你为Aineq和bineq定义了什么?Aineq必须与bineq具有相同的行数。

agus mujianto,我没有设计我的代码在Simulink环境中运行,但我听说其他用户已经成功地尝金宝app试了它。你的问题涉及到你正在使用的Simulink模型的各个方面,这不是我的工具箱的一部分金宝app。不幸的是,我不能为我没有创造的东西提供技术支持。金宝app我希望你能很快找到答案!

阿曼Parkash

嗨,山姆
我试图用线性不等式约束运行一个目标,但如果我使用ga,那么rulut将很好地与定义的范围,但不是与pso,并显示以下错误

使用horzcat出错
CAT参数尺寸不一致。

psocheckinitialpopulation错误(第36行)
if (~isempty([Aineq,bineq]) && any(Aineq*state.Population(i,:)' - bineq > . if (~isempty([Aineq,bineq]
options.TolCon))…

pso错误(第338行)
[state,options] = psocheckinitialpopulation(state,…

我设置选项:-

CognitiveAttraction: 0.5000
ConstrBoundary:‘软’
AccelerationFcn: @psoiterate
DemoMode:‘离开’
显示:“决赛”
FitnessLimit:负
代:200
HybridFcn: []
InitialPopulation: []
InitialVelocities: []
KnownMin: []
OutputFcns: {}
PlotFcns: {}
PlotInterval: 1
PopInitRange: ' (0, 2) '
PopulationSize: 40
PopulationType:“doubleVector”
SocialAttraction: 1.2500
StallGenLimit:“100”
StallTimeLimit:正
时限:正
TolCon: 1.0000 e-06
TolFun: 1.0000 e-06
UseParallel:‘永远’
矢量化:“了”
VelocityLimit: []

那么告诉我我应该做什么来满足这些约束n得到结果....谢谢

阿古斯mujianto

你好,亲爱的山姆:
我有一些粒子群优化的问题,我有simulink文件,我想用PSO优化一些部分。金宝app

代币:
%商店名称
dv_names ={‘cs_min_pwr’,‘cs_max_pwr’,‘cs_charge_pwr’,‘cs_min_off_time};
resp_names = {' combined_mpgge '};
con_names ={‘delta_soc’,‘delta_trace’,‘vinf.accel_test.results.time(1)”、“vinf.accel_test.results.time(2)”、“vinf.accel_test.results.time(3)’,‘vinf.grade_test.results.grade};

定义问题
有趣=“obj_fun_control”;
NONLCON =“con_fun_control”;
X0=[5000 45000 5000 65];%约束违反(加速)
25000年磅= [0,0,10];
乌兰巴托=(25000、50000、25000、1000);
一个= [];
B = [];
Aeq = [];
说真的= [];

我必须把dv_names, resp_names?因为它包含很多变量但我只想优化4个变量。
谢谢你!

dab483

嗨,有人知道我在哪里可以得到支持多目标优化的pso工具箱吗?金宝app

阿曼Parkash

嗨,亲爱的山姆,
当我优化目标函数时,我在Matlab脚本中遇到了如何语法这种极限范围的问题。
0 <θ₁<θ< 1 < theta4 < theta5 <(π/ 2)
请帮帮我

必应

山姆

桑贾亚,我很高兴你找到了问题的答案。在考虑了你的问题后,我也想到了一些改进代码,我将在不久的将来实现。

Natanael,这个错误看起来来自于你提供的目标函数。

我最近收到了一些来自更多社区成员的电子邮件,请求帮助使用这个工具箱。正如我之前提到的,我不能保证我能够及时或充分地回答您的具体问题。我已经用这个工具箱提供了演示函数和全面的帮助文档,以及到上面文件描述中发布的进一步信息的链接。请参考这些信息来源来找到你问题的答案。

如果您的问题是时间敏感的,与学术作业有关,请将它们发布到社区新闻组,以便更多人能够看到并回答您的问题。

桑佳亚

亲爱的山姆,
首先,我为我对你的强硬言论道歉。我很抱歉。是的,你的代码对我很有用。在你写之前,我已经把ConstrBoundaryas软,而不是惩罚,并取得了成功。非常感谢。

当我试图优化我的函数时,会得到这个错误。会是什么呢?

大量的……使用成本的错误(第3行)
输入参数不够。

@(p)成本错误

pso错误(第429行)
state.Score(i) = fitnessfcn(state.Population(i,:));

山姆

Sanjaya,我很抱歉,我对你上周第二个问题的回答应该是尝试将“约束边界”选项设置为“软”,而不是“惩罚”。这将允许优化器跳过评估任何找到可行设计空间的粒子。对于你的问题,这将意味着不需要为超出你的下限和上限约束的粒子调用Simulin金宝appk。我希望这个新消息对你来说不会太迟。

山姆

Sanjaya,关于你的第二个问题,试着将“ConstrBoundary”选项设置为“惩罚”。关于你的第一个问题,我的代码应该能够处理任何变量,因为你愿意扔给它,但不幸的是,它不能处理混合整数问题。MATLAB的全局优化工具箱中包含的遗传算法应该能够帮助您解决这一问题。

如果你有时间紧迫的问题(如学术作业),请直接向你的教授、助教或同学提问。像File Exchange社区的大多数贡献者一样,我不是Mathworks员工,有其他必须履行的职责。我不能保证我将有机会定期检查这个页面来回答你的问题。

一些资源可以帮助您解决使用工具箱时出现的任何问题,包括:
-遗传算法工具箱文档(//www.tatmou.com/help/gads/genetic-algorithm.html
-在文件描述的“参考书目”部分列出的书籍、学术论文和维基百科文章

桑佳亚

山姆喂
很遗憾你到现在还没有答复我的问题。我再次面临另一个问题,你的代码,我正在解释。
我正在从simulink文件中获得适应度函数。金宝app如果变量金宝app位于下界和上界内,simulink文件将运行。但是在您的代码中,有时变量会超过下界或上界,从而导致simulink文件无法执行,并显示错误。金宝app所以请尽快帮助我。谢谢。

桑佳亚

光环骗局,
我要优化16个参数。其中前9个参数在0到1的范围内,但其余7个变量在1到4的范围内(仅为整数)。所以请帮助我使用你的编码。你的编码对混合整数约束有用吗?它对16个变量有用吗?
期待快速回复。感谢你。

山姆

奈良和Natiolol,

我曾经想过实现一个整数求解方法,但从来没有时间这样做。经过一番思考后,我想到了一个解决这个问题的方法:你可以将整数转换为二进制形式并使用psobinary求解器。

Mouloud Kachouane,要找到一个函数的最大值,只需在你的问题前面加一个(-)号,就可以把它转换成一个求最小值的问题。

奈良

我们可以将它用于整数还是强制它从预定义的集合中选择数字。

Natialol

你好山姆,

快速的问题。这也适用于整数约束吗?

Mouloud Kachouane

你好,
非常感谢,我喜欢你的工具箱。
我想问你,我该怎么做才能用PSO(你的工具箱)搜索二维函数的最大值。
非常感谢!

山姆

嗨扎卡里,

我很高兴你发现这个工具箱对你的工作有用!关于引文,应做到以下几点:

陈,塞缪尔(2009-13)。另一个粒子群工具箱(//www.tatmou.com/matlabcentral/fileexchange/25986), MATLAB中央文件交换。检索(无论何时下载您拥有的版本)。

我从这个链接得到了格式:http://blogs.mathworks.com/community/2010/12/13/citing-file-exchange-submissions/

这也适用于任何人:如果你觉得舒服,我很想看看你如何使用工具箱的一些例子。如果你有任何出版物,这个工具箱在其中发挥了作用,请随时通过联系作者页面给我一个链接或DOI号。

扎伽利。泰勒

一个优秀的优化器,我已经在几个项目中使用了。
我目前正在写一篇论文,我使用你的优化器,我应该如何引用它?

山姆

默罕默德,这个工具箱使用了和遗传算法工具箱相同的命令行语法。所以你可以参考遗传算法工具箱的文档://www.tatmou.com/help/gads/ga.html

默罕默德

嗨,Sam,我已经尝试了几次设置LB,UB和nvars来匹配我的多维问题,但它不起作用,你能“如果你有时间”,请分步骤澄清一下,以及可以“有效”解决的决策变量的最大数量是多少,因为我正在开发一个随机储层优化代码,并且已经编写了函数,但它还不适合你的pso代码

尼玛

山姆

嗨Omari,不幸的是,我的代码不支持多目标优化。金宝app全局优化工具箱附带的GAMULTIOBJ函数将是您的最佳选择。

嗨,山姆

我开始在优化领域,但我想知道是否可以在多目标优化中使用您的代码?非常感谢

山姆

嗨,赵毅,我想你可能有一个旧版本的工具箱。在其中一个版本中,我不小心包含了一个psoiterate的副本。m文件。如果您查看popt文件夹,您应该会找到psoiterate的副本。M在popt文件夹中,另一个拷贝在/private文件夹中。只需下载最新版本,或删除现有版本的私有文件夹中的旧文件,问题就会解决。

Zhaoyi

嗨,山姆,
非常感谢你出色的工作。我正试着学会使用它。但我有个问题…也许非常愚蠢……

当我输入“pso”时,它显示:
云集……? ?使用==> popt \private\psoiterate出错
输入参数太多。

错误在==> pso在515
state = options. accelerationfcn (options,state,flag);

每次我试图用它来解决自己的问题时,它也会显示这样的信息……
希望你能帮我解决这个问题…
是因为MATLAB版本吗?我的是2010a…

非常感谢!

山姆

版本20130615应该很快上线。根据许多社区的要求,已经实现了并行计算能力。

我已经用了很长时间了。回来根据我的经验给它打分。

山姆

Mohammed,确保你设置的PopInitRange, LB和UB变量的大小是正确的。PopInitRange(使用psooptimset设置)应该是一个2 x nvars矩阵(即两行和nvars列)。LB和UB都应该是1 x nvars,即行向量。

默罕默德

嗨,山姆,这是错误信息:我已经尝试了几次修改尺寸,但它不起作用

索引超过矩阵维数。

psocheckpopulationinitrange错误(第9行)
index(~lowerInf) = LB(~lowerInf) ~= lowerRange(~lowerInf);

pso错误(第214行)
选项。PopInitRange =…

山姆

你好,穆罕默德,错误信息说什么?

默罕默德

嗨,山姆,谢谢你的工作。我只是想问你怎么修改。M来处理一个24未知优化问题?
我已经通过不同的测试函数和不同的PSO参数调整测试了你的代码,它工作得很好,但是,当我尝试高维问题时,我总是在矩阵维数和人口范围问题上失败。
你能帮我处理这个问题吗?

山姆

嗨,凯文和其他人,

最新版本(20130515)应该很快就会上线,并重新实现了一些以前丢失的错误修复,因为当我回到这个项目时,我开始使用旧版本的代码。我还做了一个小更改,以确保在使用基于惩罚的约束强制方法时,只选择可行的解决方案作为全局最优。金宝搏官方网站

接下来,我计划实现并行计算功能,正如之前许多用户建议的那样。

凯文

嗨,山姆,谢谢你更新提交。你有计划把它们转换成“墨西哥”版本吗?

山姆

这是一个相对重要的更新,我已经很长时间没有在MATLAB中编程了。尽管我浏览了之前开发的发布前测试清单,一切似乎都正常工作,但我将在谷歌Code的项目托管服务上留下稳定的2010版工具箱,供任何对新版本有问题的人使用。

链接:http://code.google.com/p/psomatlab/downloads/list

山姆

在三年的空白之后,我有了一些时间来对这个工具箱进行一些我一直想做的更新。我首先完成了一个替代约束强制方法的实现,这个方法在我2010年开始读医学院时就已经基本完成了。这种方法对于非线性约束更有效,并且可以通过设置选项来激活。当调用PSOOPTIMSET函数时,使用ConstrBoundary来“惩罚”。这个更新(版本20130502)应该会在接下来的几天出现在文件交换中。

在过去的三年里,我也从社区成员那里收到了许多有用的建议,比如kevin、Michael Johnston和其他一些私下给我发邮件的人。在接下来的几周里,我会尽量抽出一些时间来实施他们的优秀建议。

凯文

它似乎改变了pso中的所有“if strcmpi(flag,'init')”。if strcmpi(flag,'init') || (state.Generation==options. m)。PlotInterval)“能够解决问题;如果选项。如果PlotInterval大于1就会出现问题,错误消息需要先创建haxes。

凯文

致Mathworks:您是否愿意和Sam一起在未来的版本中加入粒子群优化和差分进化工具箱?我很期待

凯文

另一个建议是,是否可以添加C0, C1, C2自适应策略选项,因为这些选项对PSO算法的性能至关重要。在psooptions。PlotFcns,最好有一个额外的选项显示C0, C1和C2的趋势与pso代。非常感谢你的工作!

凯文

嗨,山姆,关于选择的一个建议。HybridFcn:

PSO和@ga混合使用是很常见的(不仅仅像ga的选项一样)。HybridFcn使用@fmincon),因为PSO在全局搜索中表现良好,而GA在收敛方面表现更好。

现在的pso。在HybridFcn上的m类似于Matlab的ga,因此适用于需要初始值的@fmincon,但可能不适用于需要变量数量的@ga:

我现在找到了为什么@ga不工作的原因,当我设置PSO选项。HybridFcn为@ga:
在你的pso的底线。M有如下代码:

检查混合功能,必要时运行
% -------------------------------------------------------------------------
if ~isempty(options.HybridFcn) && exitflag ~= -1
[xOpt,fval] = psorunhybridfcn(fitnessfcn,xOpt,Aineq,bineq,…
Aeq,说真的,磅,乌兰巴托,nonlcon选项);
结束
% -------------------------------------------------------------------------
xOpt应该是@fmincon的初始值,而@ga需要一些变量。
因此,为了正确使用@ga,这个xOpt可能必须更改为length(xOpt)或max(size(xOpt))。

有没有什么通用的策略来确保@fmincon和@ga都能正常工作?

凯文

山姆哥,看你姓陈我来测试一下你会不会中文。我发现PSO计算的时候的一些小问题:1)计算的时候显示最佳值,但是你的显示的应该不是整个过程的最佳,而是每次比较的最小,所以显示的值有时居然突然会变大;2)默认的遗传算法是可以利用上次结果的,比如选项里面把初始种群设置成上次计算的最终种群,计算就能从上次的结果开始,你这个工具箱好像没有这个功能。要是你看不懂可以谷歌翻译,或者下次我写英文的对吧?

凯文

这是我见过的最好的PSO工具箱

马文

谢谢你的努力,
你的代码在MATLAB中与我一起工作得很好,但我在SIMULINK中使用它有问题,因为代码生成不支持函数句柄或结构数据类型:)金宝app金宝app

山姆

大家好,抱歉没有更新,过去几个月我在医学院很忙,没有时间做这个项目。Rilin,您遇到的错误可能意味着您定义的约束集彼此不兼容。举个简单的例子:如果我定义了一组约束x < 5和x > 8,并且必须同时满足这两个约束,你能看出哪里可能会遇到问题吗?

Troy Lim,最好的方法是看一下MATLAB优化和全局优化工具箱的产品文档。我试图让我的工具箱与他们定义适应度函数的方式完全兼容。刚开始要掌握它有点棘手,但只要有耐心和毅力,通过MATLAB文档中提供的示例,您应该能够理解它!

Joe Ajay,我一直想在这个工具箱中编程离散优化功能,但从来没有时间去做!我不能向你保证什么,但今年夏天我可能有更多的时间来做一些更新。

画Compston

Rilin

嗨,山姆。谢谢for your good job.
当我使用非线性约束时,我遇到了一个问题。出现了“由于非线性约束,问题是不可行的”。但我不知道为什么。你能帮我吗?或者有人知道它能帮我一把。谢谢。

乔Ajay

亲爱的Sam,谢谢你的工具箱,它对我的项目真的很有帮助。我用它做了4个优化问题。我想用粒子群算法进行离散优化。你对这个工具箱有什么更新吗?如果不是,使用PSO进行离散优化的其他选择是什么?

特洛伊lim

嗨,山姆,

你已经为pso工具箱做了很好的工作。

我是一个新手在matlab处理一个项目在大学。

我需要根据所开发系统的仿真观测数据结果作为适应度函数,利用粒子群算法在simulink中优化FLC的隶属函数参数(共63个参数)。金宝app我发现对我来说最困难的部分是制定适应度函数,或者有没有可能没有适应度函数我也能找到最优解?
我希望你能帮助我或给我一些想法,因为这是我项目的最后一部分....谢谢

Rilin

或者,它可以在非线性约束函数文件中设置?

Rilin

嗨,山姆。我有一个问题,使用PSO找到C=[c1,c2,c3,c4]。约束为A*W=1,其中A=[A b],W=[c1*exp(jc3),c2*exp(jc4)]。如何设置Aeq。谢谢你的回答。

山姆

由于几个请求,我将在未来几周内修复一些与“惩罚”约束方法有关的问题,以便该算法能够正确地处理非线性约束问题。请继续关注最新消息。

fenfen熊

或者有人谁有代码,可以处理优化与非线性约束在手,你能给我一份副本吗?
很多谢谢!

我的邮箱:xiongfenfen@gmail.com

变量是
零的LB向量
1的UB向量

Aeq是一个包含0和1的矩阵
Beq是1的向量
我的初始值是一个从0到1的任意数的矩阵

惩罚是唯一的方法给我输出,但不在LB, uB和Aeq, Beq范围内
所有其他约束方法返回相同的初始值
有什么方法可以从pso中得到正确的结果,你很快会发布任何更新的工具箱吗?

我有正确的结果从ga工具箱,但我想检查其他算法
除了ga, fmincon,还有其他matlab算法能解决同样的问题吗

任何指导都将被感激

谢谢你,山姆

山姆

很抱歉这对你不起作用!“惩罚”约束方法还没有完成,它还不能完全工作:当我意识到它仍然有问题时,我把这个功能从文档中删除了,并在这个工具箱的最后一次修订中添加了警告消息。

如果“软”约束方法给你的是相同的初始值而没有变化,那么这可能是因为以下几个原因:

1.你的初始粒子位置都不可行(所以它们都被设置为无穷大,使用“软”约束强制方法)
2.你的目标函数对给定的输入向量抛出一个错误(可能与上面的原因#1有关)
3.设计空间在初始粒子位置区域是平坦的

你使用的是离散变量还是二进制变量?目前,我的PSO工具箱不支持具有实数和离散分量组合的设计向量(但M金宝appATLAB附带的GA工具箱应该能够毫无问题地支持这些设计向量)。

亲爱的山姆。
非常感谢您在这个工具箱中的努力,
我在约束pso中有问题,lb=0和UB= 1,但pso的结果不受这个边界的限制

//www.tatmou.com/matlabcentral/fileexchange/25986-another-particle-swarm-toolbox/content/psopt/psoboundsabsorb.m

Aeq和beq也不限制结果

我尝试了惩罚和软,惩罚是超出范围的lb, ub, Aeq, beq

软的意思是给我不变的初始值

你能帮我吗

山姆

Haydar,我认为RANDI函数是在MATLAB r2008b中引入的,如下所述://www.tatmou.com/matlabcentral/newsreader/view_thread/274544

如果您无法获得最新版本的MATLAB,我可以看看是否可以在周末发布一个小更新,以消除PSOBINARY对RANDI的依赖。谢谢反馈!

海达尔Dag

当使用psobinary时,系统因为无法找到'randi'函数而崩溃。

亲爱的山姆!
非常感谢你的帮助和高效的工具箱。它现在对我的问题很有效。

山姆

Hi Nguyen,我不认为这个工具箱可以与optimtool一起使用——这将需要对optimtool代码进行修改,这超出了我目前的能力。如果您从命令行中学习了如何使用优化工具箱函数,那么您应该已经为使用这个PSO工具箱做好了准备。祝你学习顺利!

亲爱的山姆!
我是学生,我不太了解pso。你能告诉我如何从optimtool中使用pso吗?
谢谢!

山姆

谢谢奥利弗,我会看看我是否可以实现你建议的并行处理选项。我没有办法测试它,所以我可能会添加一个小注释,说明该功能处于测试阶段。很高兴你发现工具箱有用!

Erdal Bizkevelci

奥利弗

山姆,

谢谢你的提交,它工作得很好。感谢您坚持使用我们这些一直在使用优化工具箱的人熟悉的语法,这确实有助于学习曲线。

我看到了一些关于利用并行处理的评论,但到目前为止似乎还没有人对此做过任何事情。当我用我的目标函数来描述pso的时候很明显在很多目标函数的计算中陷入了困境。因此,我稍微修改了代码,以并行计算所有的目标函数调用。我修改了下面几行:

for i = setdiff(1:n,find(state.OutOfBounds))
state.Score(i) = fitnessfcn(state.Population(i,:));
I的结束%

:

tempstatepop = state.Population;
itinerary = setdiff(1:n,find(state.OutOfBounds));
Temp = 0(长度(行程),1);
Parfor I = 1:长度(行程)
Temp (i) = fitnessfcn(tempstatepop(行程(i),:));
I的结束%
state.Score(itinerary) = temp;

这可能是一种粗糙的方法,但即便如此,我还是看到速度提高了不到3倍。也许类似的东西在未来的构建中会有帮助。再次感谢。

要长久

迈克

亲爱的山姆。
我正在写一个简单的PSO函数在matlab中,我想问:
如果粒子超出边界,我是否应该将速度重置为0 ?

马克海岸

山姆,如果时间允许,我会在不久的将来试用你的工具箱。至于安装MATLAB工具箱的要求,我认为是越少越好。

作为一个单一的商业许可证用户,我必须为我购买的每一个额外工具箱(对我自己来说,但仍然……)小波和信号处理工具箱不是问题。得到了John D’errico的SLM工具的优化工具箱,但仍然在观望并行处理、图像处理、映射工具箱和曲线拟合工具箱等。这里1000美元,那里1000美元,加上维护,最终加起来,可以削减一个人测试FEX提交的愿望……

山姆

嘿,Ben,在为PSOOPTIMSET m文件提供的帮助中有一个简短的说明(我知道,文档分散在各个地方——我希望做的一件事是创建一个更全面的帮助文件)。

很高兴你觉得演示很有用,马克。我在考虑将全局优化工具箱包含在需求列表中,因为它确实有助于熟悉GA。但是正如您所发现的,运行PSO代码并不是严格必要的。

马克海岸

…或者我可以下载APST,运行附带的演示,然后简单地回答我自己的问题。是的-如所列-需求是优化工具箱。

马克海岸

一个快速的问题-另一个粒子群工具箱需要MATLAB的优化工具箱,而不是遗传算法(现在是全局优化)工具箱,对吗?

嗨,山姆,

您能简单解释一下如何设置与不同约束相关的选项吗?坦率地说,.m文件中没有多少单词。

谢谢你!

山姆

看来要到周一之前提到的修复程序才能发布。

山姆

本,谢谢你指出来。我实际上是在试验一种新的默认约束强制方法(“惩罚”),但它似乎不能很好地处理边界约束。你可以通过设置选项来解决这个问题。将边界限制为“软”或“吸收”。我将发布一个快速补丁(应该在明天发布),将默认设置恢复为“软”,这样其他人就不会发生这种情况。

WANG,你给PSOBINARY传递输入参数了吗?PSO将在没有任何输入的情况下运行默认的演示用例,但我还没有为PSOBINARY提供类似的函数。无论如何,PSOBINARY的第一个参数应该是一个指向你自己编写的适应度函数的指针(它实际上不应该是'fitnessfcn',这只是在上述功能点的文档中使用的占位符)。它应该能够接受0和1的1xnvars向量,并返回一个适应度值。当调用PSOBINARY时,确保适应度函数的m文件在路径中。希望这能有所帮助。

谢谢你的推荐。我发现我的版本低于要求,所以我更新了它。然后运行pso。M成功,但是当我运行psobinary。M,它似乎
? ?输入参数“fitnessfcn”未定义。

错误在==> psobinary在37
[xOpt,fval,exitflag,output,population,scores] =…
你能告诉我是什么问题以及如何解决吗?
谢谢你。祝福你!

嗨,山姆,

还有另一个问题:有时结果会跳出框框约束(下限和上限)。你以前见过它吗?

谢谢

山姆

WANG,这个PSO工具箱的语法在PSO .m文件顶部的注释中描述。您可以从命令行输入>> help pso,并将当前目录设置为pso所在的目录。M文件,读取它,或者你可以直接打开文件。正如我之前提到的,它应该与全局优化工具箱中包含的遗传算法的语法相同,所以你也可以参考它们://www.tatmou.com/help/toolbox/gads/ga.html

如果您所说的BPSO是指二进制PSO,请确保您没有试图强加任何约束。类型>>帮助psobinary学习二进制pso的语法,两者略有不同。

t g和satish,我很想帮你,但学校对我来说太忙了,你的问题太大了,我现在无法适当地解决。再次,我建议阅读我的PSO工具箱提供的文档,以及我推荐给WANG的MATLAB的全局优化工具箱(它可能比我的写得更好,呈现得更好)。您可以尝试一些简单的示例,以了解如何使用工具箱。我希望你的研究进展顺利!

嗨,山姆
我正在使用基本的粒子群算法来解决我的函数最小化问题,它是有效的,但gbest超出了范围。你能让我知道,如何以及在哪里我可以改变我的代码。
谢谢
sk耆那教徒的
satishjain.jain@gmail.com

嗨,山姆
首先感谢您的辛勤工作和无私奉献。我是一个电气工程的硕士,想使用BPSO来优化一个函数,但我不能运行psotoolbox成功。当我运行pso.m时,那么
? ?函数名必须为字符串。

错误在==> psooptimset在180
Idx = find(cellfun(@(varargin)strcmpi(varargin,requiredfields{i,1}),…

错误在==> pso在171
选项= psooptimset(选项);
你能给我更多关于语法的细节吗?
非常感谢!
最美好的祝福!

t g

嗨,山姆,
我正在做我的大学项目制造单元设计使用PSO工具。将该问题定义为零件与机器的关联矩阵,并将聚类按对角线分段形成,以生成单元。目标是最小化异常元素计数(EE)。PSO粒子串应该包含单元格号,粒子串的索引是机器号。
由于我是新手,在实现逻辑和代码方面遇到了问题。有人能在这方面提供帮助吗?程序界面为Matlab。这个问题显示在一个链接中http://www.mypicx.com/uploadimg/53506343_09112010_1.jpg

如果你能帮我的话。

山姆

在公共话题上转发这篇文章,以防其他人有同样的问题:

嗨,本,

/private文件夹中的psocreationuniform函数将基于options.PopInitRange使用统一随机分布生成初始population。如果你有线性或非线性(in)等式约束,这个初始填充将被传递给psocheckinitialpopulation(同样在私有文件夹中),它将确保所有的初始点都是可行的,移动那些不可行的。无论如何,如果我下面的答案不清楚,请告诉我你的问题中有哪些限制,我看看是否可以回复你。我将在接下来的几天内搬家,所以可能要过一段时间才能看到你的下一个回复:

我遇到的一个问题是,默认情况下,PopInitRange选项在所有维度上都设置为从0到1(即repmat([0;1],1,nvars))。这显然不能代表所有的设计空间。如果您没有设置任何边界约束LB和UB,这可能是一个问题。这种行为是在我基于MATLAB的原始遗传算法代码中,所以我让它保持原样,以防其他人已经编写了假设这种行为的GA代码,并想用PSO尝试它。

所以基本上,如果你还没有尝试过这个,你可以手动设置PopInitRange选项到一个合理的范围,完全包含你的设计空间。CognitiveAttraction和SocialAttraction选项也可能被调整,但首先请参阅psooptimset帮助中提供的关于它们的说明。更彻底地,您可以尝试编辑psocreationuniform函数。

如果这些都不起作用,我倾向于说你遇到了PSO的固有限制,也就是说,如果你在设计空间的一个足够小的域内初始化它,而全局最优在它之外,那么群集不能保证找到它的出路。

山姆

嗨,山姆,

我用你的代码来解决我算法中的一个子问题。然而,在进行密集测试时,我发现你的代码存在一些稳定性或可重复性问题。在大量测试的许多情况下(超过10%),我使用相同的配置(相同的数据集,相同的目标函数,相同的pso选项)得到了不同的结果。

根据我的观察,这是由初始粒子引起的。它被困在某个不合理的局部极小值中。

你能告诉我最初的粒子是怎么产生的吗?

谢谢

山姆

本,谢谢你的建议。下周事情对我来说不那么忙的时候我会去看看。kaz uki,我自己不熟悉离散PSO,所以我不能给你太多帮助。试着在谷歌Scholar或Compendex上搜索相关论文。希望你最后一年的项目进展顺利。

kaz uki

我是PSO的新手…有人能帮助我如何最小化装配序列时间(产品)使用离散PSO(DPSO),并使用matlab实现它…我的学位期末项目.....需要这个我不知道从哪里开始,所以请有人一步一步地引导我。电子邮件给我最好的....

kaz uki

你可以给我发邮件到mtaufiq23@gmail.com...i,尽我所能。

嗨,山姆,

关于绘图部分的一个小建议。这样更方便,至少对我来说。希望对大家有所帮助。

如果~ isempty (options.PlotFcns)
% % % %关闭(findobj(“标签”,“群阴谋”,“类型”,“图”));
hFig = findobj(“标签”,“PSO_Plots”,“类型”,“图”);
如果isempty (hFig)
状态。figure = figure(…)
'NumberTitle', 'off',…
“名字”,“粒子群优化”,…
“NextPlot”,“replacechildren”,…
'标签','PSO_Plots');
其他的
状态。hfigure = hFig;
set(0, 'CurrentFigure', state.hfigure);
结束;
如果~为空,结束%

山姆

看得真准,塞缪尔。然而,惯性权重在默认情况下确实会缩放,从优化开始时的0.9到达到最大迭代次数时的0.4。我已经更新了工具箱,以便速度更新函数可以通过将“AccelerationFcn”选项设置为适当的函数指针来更改为您自己的自定义函数。我还没有记录它的语法,所以最好使用默认的psoiterate函数作为模板来开发自己的velocity更新函数。它目前位于/private目录中,但在未来的版本中将被移动到base目录中。

你现在还可以使用“TimeLimit”选项为解算器设置时间限制(以秒为单位)。默认值是无穷大。

撒母耳

实现细节:这个PSO版本使用静态间隔权重。您可以轻松地更改文件“psoiterate”中的速度更新函数。m”,如果你想实现一些动态变化,甚至使用不同的PSO技术,比如收缩因子而不是惯性加权。

迈克,

要最大化一个函数,只需最小化它的加法逆函数。换句话说,最大化f(x)在数学上等同于最小化-f(x)。

要做到这一点,一个简单的方法就是添加
"f = -f;"作为测试函数的最后一行。

迈克

嗨,山姆,
你的工具箱很完美。
但是现在,我想用粒子群算法求函数的最大值。
你介意帮我一下吗?

撒母耳

你好,山姆先生,

非常感谢这个优秀的软件。我只是对你们实施的细节有个问题。你是否在更新速度中使用惯性权重,如果是,权重是否会减少?在“定义粒子群优化的标准”中,一些PSO的原始成员推荐了它——Daniel Bratton和James Kennedy。它可以在开始时进行良好的空间搜索,并在结束时进行微调。

另外,如何处理超过边界的粒子?你是完全阻止它们出去,还是让它们在没有评估代价函数的情况下出去(这将使粒子最终拉回允许的搜索空间)?我问这个问题的原因是,阻止粒子完全出去会导致一些偏向搜索空间的中心。

再次感谢!我使用您的实现取得了巨大的成功。

山姆

大家好,我一直在忙我的论文,所以在可预见的将来,我将无法为这个文件提供任何技术支持。金宝app我很高兴这么多人发现它很有用。如果您有任何问题,请参考之前的评论,文件描述,以及熟悉如何使用MATLAB的全局优化中包含的遗传算法(//www.tatmou.com/access/helpdesk/help/toolbox/gads/bqe0w5v.html#bqe0w6h-2).

厕所程

嗨,山姆
首先感谢您的辛勤工作和无私奉献。
我在使用psodemo时遇到了一些问题,出现了一些错误,我试图解决,但最后失败了,错误提示如下
“? ?使用==> strcmp时出错
输入必须是相同的大小,或者其中一个可以是标量。

错误在==> isfield在12
Tf = any(strcmp(字段名(s),f));

错误在==> psodemo在38
如果任何(isfield(选项,{‘选项’,‘Aineq’,‘Aeq’,“磅”}))”

嗨,山姆
我是新来的。我不能成功地运行这个工具箱。你能给我更多关于语法的细节吗?
非常感谢!

Amaraporn

非常感谢你的友好回复。当我使用默认的测试功能12输入。12输出从未达到已知的全局最小值。然后我调优了工具箱中所有可能的参数,并找到了最佳参数集
CognitiveAttraction = 1.5
SocialAttraction参数=1.5
代数= 300
popsize = 50

这使得12个输出中的11个满足理论最小值。到目前为止,我还没有找到任何pso参数集,可以使输出收敛到每次运行的同一点,这是对全局最小值的一般期望。以某种方式使边界更严格可能是有帮助的,所以我正在尝试。

山姆

Amaraporn,只有当CognitiveAttraction和SocialAttraction参数之和小于4时,蜂群才稳定;如果它们是2和2,那么2+2 = 4,蜂群就不会收敛。试着减少它们中的一个或两个,使它们的和小于4。我将在文档中添加关于这一点的注释(和论文参考)。

此外,尝试使用更少的代;这将使惯性减简参数的尺度更好。1万是一个非常大的代数。试着将“代”设置为最多几百个。“StallGenLimit”也是一样——当您使用默认值时会发生什么?

Amaraporn

亲爱的山姆。

就一个关于你工具箱中用到的粒子群算法参数的问题。我试着调音
problem.options.Generations如。10000
problem.options.CognitiveAttraction如。2
problem.options.SocialAttraction如。2
problem.options.StallGenLimit如。8000
problem.options.PopulationSize如。40
和初始惯性。1

但是对于我的12个参数的目标函数,无法找到全局最小值。我正在寻找其他重要的参数,想知道你是否在算法的某个地方得到了这些以下参数。“惯性折减参数”、“束缚与速度分数”、“速度折减参数”

山姆

很高兴有帮助。5000帧听起来是很多数据,所以可能需要很长时间,这取决于你的计算机和计算的复杂性。有关提高MATLAB代码性能的技巧,请参阅本文档://www.tatmou.com/access/helpdesk/help/techdoc/matlab_env/f9-17018.html

Amaraporn

山姆

非常感谢你所有的反馈:)现在我可以使用你的工具箱与实际功能,虽然花了几乎一整天干净的终止。我不是一个计算的人,所以有点想知道它的时间消耗。obj函数将12参数动态模型拟合到实验动态运动(5000帧)时间历史数据听起来是否合理?无论如何,这对每个人都是一个很好的工具箱,包括来自外地的学生,我确认:)

山姆

Amaraporn,不要使用PSODEMO来运行实际的优化。我加入这个函数是为了提供一种简单的方法来可视化蜂群的行为,但它并不打算用于运行实际的优化。

相反,您应该使用键入>> help PSO时解释的语法直接调用PSO。它被设计成非常类似于遗传算法(现在称为“全局优化”)工具箱,所以如果你熟悉它的文档(链接在我以前的一篇文章中提供),它会有帮助。如果您阅读PSO提供的帮助,您将看到没有“默认”维度。问题的维度数(nvars)必须由用户提供,即>> pso(@fitnessfcn, nvars,…)

Amaraporn

亲爱的山姆。

你是正确的持久功能,我已经纠正了它,并尝试默认选项。我发现工具箱终止与一些本地分钟如下。
[420.97 420.97 420.97 -302.53 420.97 420.97 420.97 420.97 -302.52](理论全局最小值为420.97)。

因此,我假设工具箱可以很好地使用12个输入,只要定义了合适的pso变量。
现在,我将它与我的真实obj函数一起使用,它有一个目标函数服从于lb和ub,用于12个输入(这个目标函数已经与fmincon(单独)一起工作)。与pso工具箱一起使用时的错误如下。

%%%%%%%%%%%%%%%%%%%%%%%%%
云集……? ?试图访问Swarm(3);索引出界,因为数字(Swarm)=2。

错误==> vMarkSqr_spineCT_pso_mod在37
vThoracicTransl =[群(1);群(2)群(3)];

错误在==>覆盖表面在13
ZZ(i,j) = fitnessfcn([XX(i,j) YY(i,j)]);

错误==> psoplotswarmsurf在30
overlaysurface (state.fitnessfcn、期权);

错误在==> pso在334
state = options. plotfcns {i}(选项,状态,标志);

错误在==> psodemo在61
pso(问题);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
“Swarm”是我优化的参数。
语句“Error in ==> vMarkSqr_spineCT_pso_mod at 37 .
vThoracicTransl=[Swarm(1);Swarm(2);Swarm(3)];”是关于我的目标代码,第37行是我主要计算的第一行。
我认为这是工具箱的默认群维度和我的obj函数的输入维度之间的问题。我的功能从简单的标题开始如下。有什么需要改变的吗?不方便把整个函数发给你,但我可以如下解释它的工作原理。

%%%%%%%%%%%%%%%%%%
函数LeastSqr = vMarkSqr_spineCT_pso_mod
%%%%%%%%%%%%%%%%%%

这个obj函数是基于多个变换矩阵的计算,类似于生物力学应用中的一个,你可能已经知道它是“使用粒子群并行全局优化求解踝关节参数”。在主obj函数中,其他3个函数(由我自己创建)被调用,所有处理转换矩阵,每个矩阵都是从(3-5)群输入计算出来的。

请问您对此有何评论?

山姆

Amaraporn,我能问一下为什么你把sumX作为测试函数的持久变量吗?这意味着它的值在函数调用之间被保留,因此每个粒子的适应度值将依赖于所有先前评估的粒子的适应度。这可能不是您希望PSO做的事情。如果将直线改为sumX = 0会怎样?

在默认选项下,swarm如何执行?

Amaraporn

嗨,山姆,

非常感谢您的反馈:)现在我回到了一个测试函数,它的答案是已知的。我发现你的工具箱易于使用,有2-11个输入,需要合适的种群大小和代来帮助找到全局最小值。现在,我有12个输入的问题,种群大小=50,代=从2000到8000。如果你能帮助评论如何定义合适的pso变量来实现全局最小值。
-----------------------------------
Eror:
适应度函数值在最近50代没有提高,61代后最大约束违反小于1e-006。
-------------------------------------------------------

测试函数代码如下,以lb = -500和ub=500为条件(如你所知,与输入数在同一维度)。

%%%%%%%%%%%%%%%%%%%%%%%
f = easyTest(x)
[xSize, Dim] = size(x);
持久sumX
j = 1:昏暗的
Fx = (-x(j)) * sin(根号(abs(x(j))));
sumX = sumX+fx;
结束
f = sumX;
%%%%%%%%%%%%%%%%%%%%%%%%

山姆

你好,Amaraporn,我将调查第258行发生了什么。我能问一下你用来设置选项结构然后调用pso的确切代码是什么吗?

我知道为这个PSO代码设置所有选项有点复杂——我把它写得非常类似于已经提供了MATLAB工具箱的遗传算法,所以已经知道如何使用工具箱的人可以很容易地将他们的代码转移到这个PSO算法上。如果有任何不清楚的地方,遗传算法工具箱的在线文档可能会有所帮助://www.tatmou.com/access/helpdesk/help/toolbox/gads/f6010dfi3.html

Amaraporn

嗨,山姆,
我试图使用你的工具箱解决一个目标函数主题lb和ub与12个输入,但发现它是相当复杂的定义合适的选项让程序运行。大多数情况下,我发现了这个错误,一直在尝试,现在不顾一切地解决它。

云集……? ?下标下标必须是实正整数或逻辑整数。

错误在==> pso在258
state.Score(setdiff(1:n,find(state.OutOfBounds))) =…

你的意见会很有帮助

山姆

Uduakobong,如果你以前从未使用过PSO,那么最好花点时间阅读一下这个文件描述中“参考书目”下面列出的三篇参考文献。将连续变量和离散变量混合是一个有趣的问题,但这个工具箱不能做到这一点。由于有一些兴趣,我将很快实现用二进制变量解决问题的能力。

Uduakobong

你好,山姆,我试图写一个PSO程序来解决一个多目标,非线性的人为问题。这个问题有三个变量,其中两个是离散变量,一个是连续变量。问题是我以前从未使用过PSO,所以我发现很难理解该做什么。你能给我一些建议吗?谢谢

山姆

当然,您也可以使用我在“致谢”部分中列出的另外两个文件所提供的测试函数。

阿尔伯特·李

嗨,山姆

我需要回答你回答我的问题。由于我正在研究混合粒子群算法和其他算法,所以我需要编写程序并在测试函数上进行测试。我的一个程序是粒子群蚁群优化。另一个是进化粒子群优化。因此,我希望能提供一些指导方针来解决这个问题。谢谢你!

山姆

Albert,蚁群算法与粒子群算法有很大的不同,尽管已经有论文提出了两种算法的混合。我的粒子群代码本身不做蚁群优化,所以我不确定你的问题是什么——你是想写一个蚁群算法,还是想学习如何使用别人的蚁群工具箱?

为这个PSO工具箱定义适应度函数的方法与其他MATLAB优化器(如GA、FMINCON或FMINUNC)相同。你编写的任何适合这些优化器的适应度函数也应该适用于PSO。请看这个文档//www.tatmou.com/access/helpdesk/help/toolbox/optim/ug/brhkghv-3.html唯一的问题是,你不需要向PSO提供梯度/雅可比矩阵或黑森矩阵。注意PSO只能最小化适应度值;如果你有一个问题,你试图最大化f(x),只要设g(x) = -f(x)和最小化g(x)用PSO。

阿尔伯特·李

我可以知道如何写粒子群蚁群优化的Matlab代码吗?如果测试函数与PSO工具箱相同。谢谢你!

山姆

我考虑过添加并行处理功能,但我自己没有工具箱,所以没有办法测试它。

另一种选择是使用向量化适应度函数,设置选项。向量化到“开”,并在适应度函数中执行所有并行计算任务,独立于PSO代码。

如果你有兴趣合作增加并行计算能力,我有一个SVN存储库与这个项目进行谷歌代码项目托管,只需搜索“psomatlab”。

我可以很容易地设置PSOOPTIMSET来创建适当的选项,而拥有并行计算工具箱的人可以设置PSO本身来处理它。如果你感兴趣,请告诉我。

谢谢,山姆。您是否考虑过为并行处理添加选项(对于那些拥有并行计算工具箱的人)?

山姆

迈克:我上传了一个新版本,明天就会出现。您可以设置选项。Display为“off”以终止所有命令行输出(除了一些您可能无论如何都想知道的警告和错误消息)。

山姆

Mike——这是个好主意,我可以很快实现“安静”模式。

非常感谢您提供的代码。你显然下了不少功夫。到目前为止,我这边的性能和稳定性是完美无缺的。

我能想到的唯一功能请求是在选项结构中添加一个字段来控制命令窗口输出的冗长程度?有时候能够完全消灭它是件好事。

最好的

迈克

山姆

你好卡里姆,

很抱歉,我知道我提到了为这个工具箱实现二进制变量的可能性。在过去的几周里,我的论文工作把我带到了另一个方向,所以我想我没有时间做它了。我描述的参考书目部分列出的第一本书:J Kennedy, RC Eberhart和YH Shi所著的“群体智能”,详细描述了如何使用二进制变量实现PSO,如果你感兴趣的话。

山姆

卡里姆

亲爱的山姆先生

我eng。卡里姆and i want to thank you about this great tool box and i ask about any news for binary support for this tool box since i work in my Master's degree and i want to use binary pso and i didnt find any matlab code support this. finally thank you again.

山姆

亲爱的赛义德先生:

你的适应度函数与其他MATLAB优化求解器工作吗?请参阅此文件(//www.tatmou.com/access/helpdesk/help/toolbox/gads/brdvur4.html如何为遗传算法编写适应度函数(这也应该适用于PSO)。请注意,这个PSO代码还不支持二进制(其中唯一可能的值是0或1)金宝app或离散变量。

山姆

亲爱的先生,您好!我为我的最佳中继协调硕士做准备,如果你愿意,我需要你的帮助,为我提供一个群代码,以确定最佳中继设置(我不能为每个粒子做适应度函数)
谢谢

山姆

嗨,汤姆,

此网页(http://www.particleswarm.info/Programs.html)给出了一个很大的可用工具箱列表,尽管我不知道它们是否可以处理非线性约束,而且大多数都不是用MATLAB编写的。既然您感兴趣,我将在未来的版本中为这个工具箱实现非线性约束,也许在大约两周的时间内?

山姆

汤姆

嗨,山姆,
我对具有线性和非线性约束的高维问题的PSO感兴趣,但我发现这个包不能处理它。
有没有其他PSO工具箱来处理非线性和线性约束的问题?请让我知道:dr.xinlivu@gmail.com。我等待你的回复。

谢谢,
汤米

山姆

很高兴你觉得有用。供你参考,我刚刚发现了一个bug,蜂群实际上不符合施加的线性约束。我正在努力尽快解决。

翰林张

这个PSO工具箱对于解决约束优化问题非常有用。谢谢。

MATLAB版本兼容性
使用R2017a创建
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!