flame* 2022-02-24 16:17 采纳率: 50%
浏览 36
已结题

关于#matlab#的问题:分析第二个脚本参数不足的原因并给出修改意见

两个脚本,第一个能顺利运行,运行第二个时显示输入参数数目不足
%第一个脚本
clear all;close all;clc;
%宽和长%
width=78;
height=52;
w1=0.6;
w2=0.4;
%计算dmax%
dmax=width+height;
%运输成本 %
c=0.01;
%距离矩阵%
D = zeros(12,12);
%关联因子bij矩阵%
B = zeros(12,12);
u1=0;
u2=0;
%非物流关系矩阵%
T=[
0    3    0    0    1    2    0    0    0    0    1    0;
0    0    1    0    0    -1    0    0    0    2    0    0;
0    0    0    3    0    -1    0    0    0    2    0    0;
0    0    0    0    4    -1    0    0    0    0    0    0;
0    0    0    0    0    3    0    0    0    1    0    0;
0    0    0    0    0    0    2    -1    -1    2    -1    -1;
0    0    0    0    0    0    0    4    0    0    0    0;
0    0    0    0    0    0    0    0    0    1    3    0;
0    0    0    0    0    0    0    0    0    2    0    0;
0    0    0    0    0    0    0    0    0    0    0    0;
0    0    0    0    0    0    0    0    0    0    0    4;
0    0    0    0    0    0    0    0    0    0    0    0;
];    
%设定物流量% 
Q=[    
0    50000    1258    0    8400    13600    0    0    0    0    9625    0;
0    0    6600    0    0    0    0    0    0    34800    0    0;
0    0    0    87500    0    0    0    0    0    41600    0    0;
0    0    0    0    105000    0    0    0    0    0    0    0;
0    0    0    0    0    92000    0    0    0    6400    0    0;
0    0    0    0    0    0    36000    0    0    28700    0    0;
0    0    0    0    0    0    0    93000    0    0    0    0;
0    0    0    0    0    0    0    0    910    6300    79980    0;
0    0    0    0    0    0    0    0    0    16800    0    0;
0    0    0    0    0    0    0    0    0    0    0    0;
0    0    0    0    0    0    0    0    0    0    0    93600;
0    0    0    0    0    0    0    0    0    0    0    0;
];

%% 计算u1 %% 
cd=c*dmax; 
for i=1:10
for j=i+1:11
u1=u1+cd*Q(i,j);
end
end
u1=w1/u1;
%% 计算u2 %% 
for i=1:10
for j=i+1:11
u2=u2+T(i,j);
end
end
u2=w2/u2;
%第二个脚本
function fit=compute_fit(par) 
MAX=0;
A1=0; 
A2=0;
%% 固定系数
u1=1.4e-6;
 u2=1.5e-2;
%% 计算参数
[c Q T D B]=load_data(par);
l=[20 35 25 10 20 22 22 20 8 10 28];
w=[20 15 22 28 15 28 25 28 25 15 22];
l=l-3*ones(1,11);
w=w-3*ones(1,11); 
H=80;
W=90;
flag=0;
%% 计算第一项和第二项 目标函数第一项
for i=1:10
for j=i+1:11
A1 = A1 + c*Q(i,j)*D(i,j); 
A2 = A2 + c*T(i,j)*B(i,j);
end
end
%% 计算约束
for i=1:10
pp1 =par.x(i)-l(i)/2;
pp2 =par.y(i)-w(i)/2;
pp3 =H-l(i)/2-par.x(i);
pp4 =W-w(i)/2-par.y(i);
if ( pp1<0 || pp2<0 || pp3<0 || pp4<0 )
 flag=1;
break;
end
for j=1:10
if (i==j)
continue;
end
kk1=max([l(i)/2 + l(j)/2 - abs(par.x(i) - par.x(j)),0]);
kk2=max([w(i)/2 + w(j)/2 - abs(par.y(i) - par.y(j)),0]);

if ((kk1*kk2) ~= 0) 
flag = 1; 
break;
end
end
if ( flag == 1)
break;
end
end
%% 计算适应度
if (flag == 1)
fit=-1;

else
fit=1/(MAX + u1*A1 + u2*A2);
end

end
错误结果

![img](

######https://img-mid.csdnimg.cn/release/static/image/mid/ask/834803096546162.png "#left")
我的解答思路和尝试过的方法
看起来是第二个脚本在引用第一个脚本的参数时出现了问题,尝试过改第一个脚本的文件名,不起作用

我想要达到的结果

分析第二个脚本参数不足的原因并给出修改意见,使第二个脚本顺利运行,最终得到fit的值

  • 写回答

3条回答 默认 最新

  • 技术专家团-Joel 2022-02-24 16:53
    关注

    第二个脚本你需要输入变量par,且这个变量是个结构体,里面有x和y即par.x和par.y的值
    然后命令行是:

    fit=compute_fit(par) 
    

    没有par变量,不用命令行,直接运行是行不通的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月24日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?