首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何同时并行运行初始值x0

如何同时并行运行初始值x0
EN

Stack Overflow用户
提问于 2015-12-18 10:49:33
回答 1查看 29关注 0票数 0

这段代码运行良好,但绘图不正确,因为优化函数fmincon将取决于初始条件x0和迭代次数。对于alpha (a)和beta (b)的每个值,我应该使用不同的初始条件x0多次运行优化,以验证我是否获得了正确的答案。可能需要更多的迭代才能得到准确的答案。

我希望能够为x0ab运行具有不同初始条件的优化。

函数文件

代码语言:javascript
运行
复制
function f = threestate2(x,a,b)
c1 = cos(x(1))*(cos(x(5))*(cos(x(9))+cos(x(11)))+cos(x(7))*(cos(x(9))-cos(x(11))))...
   +cos(x(3))*(cos(x(5))*(cos(x(9))-cos(x(11)))-cos(x(7))*(cos(x(9))+cos(x(11))));
c2=sin(x(1))*(sin(x(5))*(sin(x(9))*cos(x(2)+x(6)+x(10))+sin(x(11))*cos(x(2)+x(6)+x(12)))...
    +sin(x(7))*(sin(x(9))*cos(x(2)+x(8)+x(10))-sin(x(11))*cos(x(2)+x(8)+x(12))))...
    +sin(x(3))*(sin(x(5))*(sin(x(9))*cos(x(4)+x(6)+x(10))-sin(x(11))*cos(x(4)+x(6)+x(12)))...
    -sin(x(7))*(sin(x(9))*cos(x(4)+x(8)+x(10))+sin(x(11))*cos(x(4)+x(8)+x(12))));
f=(a*a-b*b)*c1+2*a*b*c2;

主文件

代码语言:javascript
运行
复制
%x=[x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9),x(10),x(11),x(12)]; % angles;

lb=[0,0,0,0,0,0,0,0,0,0,0,0];
ub=[pi,2*pi,pi,2*pi,pi,2*pi,pi,2*pi,pi,2*pi,pi,2*pi];
x0=[pi/8;0;pi/3;0;0.7*pi;.6;0;pi/2;.5;0;pi/4;0];
xout=[];
fout=[];
options = optimoptions(@fmincon,'Algorithm','interior-point','TolX',10^-10,'MaxIter',1500);
a=0:0.01:1;
w=NaN(length(a));

for i=1:length(a)
     bhelp=(1-a(i)*a(i));
if bhelp>0
    b=sqrt(bhelp);
       [x,fval]=fmincon(@(x)threestate2(x,a(i),b),x0,[],[],[],[],lb,ub,[],options);
w(i)=fval;
w(i)=-w(i);
B(i)=b;
else
w(i)=NaN;
B(i)=b;
end 
end
%surface(b,a,w)
%view(3)
%meshc(b,a,w)
x=a.^2;
plot(x,w)
grid on
ylabel('\fontname{Times New Roman} S_{max}(\Psi_{gs})')
xlabel('\fontname{Times New Roman}\alpha^2')
%ylabel('\fontname{Times New Roman}\beta')
title('\fontname{Times New Roman} Maximum of the Svetlichny operator(\alpha|000>+\beta|111>)')
EN

Stack Overflow用户

发布于 2015-12-18 13:29:01

如果您有Matlab并行工具箱,您可以使用parfor,它类似于常规循环,但是并行运行的。

要使用它,你应该在一个函数中创建你所有的杂乱的脚本。假设您将初始条件存储在A(i)中,并将结果存储在B(i)中,则可以使用类似以下内容:

代码语言:javascript
运行
复制
parfor i=1:length(B)
    B(i)=optimise(A(i));
end

如果你没有工具箱,还有一些其他的方法(例如MEX文件),但基本上你必须自己管理线程,所以我不推荐这样做。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34347817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档