
MATlab 遗传算法处理多目标的优化问题,计算目标函数值的时候出现问题
function[objvalue]=calobjvalue(pop)%计算目标函数值%遗传算法子程序%Name:calobjvalue.mtemp1=decodechr...
function [objvalue]=calobjvalue(pop)
% 计算目标函数值
%遗传算法子程序
%Name: calobjvalue.m
temp1=decodechrom(pop,1,24); %将pop每行转化成十进制数 相当于X'
temp2=decodechrom(pop,25,24);
temp3=decodechrom(pop,49,24);
temp4=decodechrom(pop,73,24);
x1=temp1*1/(pow2(24)-1); %将二值域 中的数转化为变量域 的数 相当于十进制的X
x2=temp2*1/(pow2(24)-1);
x3=temp3*1/(pow2(24)-1);
x4=temp4*1/(pow2(24)-1);
ZBX=(((x3-x1)*cosd(30)-x1*sind(30))*cosd(30))*sind(60)-634.4469;
ZBY=(((x3-x1)*cosd(30)-x1*sind(30))*cosd(30))*cosd(60)-366.2981;
ZBZ=x2*cosd(30)+(x3-x1)*(2*sind(30))+x4-1775.4;
if (ZBX^2+ZBY^2+ZBZ^2)^0.5<0.5
data=1;
else
data=0.001;
end
objvalue=(1/(20*exp(-5*x1)+20*exp(-5*x2)+20*exp(-5*x3)+20*exp(-5*x4)))*data; %计算目标函数值
没有加ZBX~DATA 这些之前运行无误,加上之后运行总说我的if语句需要用点乘,换成点乘后又说我后面的程序数组越界。坑爹啊!!希望有高手能指点下,如果可以,希望QQ联系!! 展开
% 计算目标函数值
%遗传算法子程序
%Name: calobjvalue.m
temp1=decodechrom(pop,1,24); %将pop每行转化成十进制数 相当于X'
temp2=decodechrom(pop,25,24);
temp3=decodechrom(pop,49,24);
temp4=decodechrom(pop,73,24);
x1=temp1*1/(pow2(24)-1); %将二值域 中的数转化为变量域 的数 相当于十进制的X
x2=temp2*1/(pow2(24)-1);
x3=temp3*1/(pow2(24)-1);
x4=temp4*1/(pow2(24)-1);
ZBX=(((x3-x1)*cosd(30)-x1*sind(30))*cosd(30))*sind(60)-634.4469;
ZBY=(((x3-x1)*cosd(30)-x1*sind(30))*cosd(30))*cosd(60)-366.2981;
ZBZ=x2*cosd(30)+(x3-x1)*(2*sind(30))+x4-1775.4;
if (ZBX^2+ZBY^2+ZBZ^2)^0.5<0.5
data=1;
else
data=0.001;
end
objvalue=(1/(20*exp(-5*x1)+20*exp(-5*x2)+20*exp(-5*x3)+20*exp(-5*x4)))*data; %计算目标函数值
没有加ZBX~DATA 这些之前运行无误,加上之后运行总说我的if语句需要用点乘,换成点乘后又说我后面的程序数组越界。坑爹啊!!希望有高手能指点下,如果可以,希望QQ联系!! 展开
1个回答
展开全部
1 您确定ZBX ZBY ZBZ都是标量吗?
2 改成
if norm([ZBX ZBY ZBZ])<0.5
试试?
2 改成
if norm([ZBX ZBY ZBZ])<0.5
试试?

2025-02-09 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询