一段MATLAB程序运行不出来,不知道哪里出错了,跪求高手解答

%%%%%从o点出发达到目的地
function [chengyong,shuru,wq1,wq2]=gengxin(pfangan,guanxi,tm,chengyong,kchy)
%%%若选择的为1-2,选择可供使用的方案(尽量满装)
tf=find(pfangan(:,1)<=kchy(1,1)&pfangan(:,2)<=kchy(1,2));
if length(tf)>0
%%%方案存在(可以满装)选用方案tm(1)对tf(1)及其临界点进行装载
zuizhong=[zuizhong;[pfangan(t(1),1:2),]]
%%%%对乘用车进行更新
P=[tm(1),guanxi{tm(1)}];
shuru=pfangan(tf(1),:);
[chengyong,wq1,wq2]=xiaochu(chengyong,P,shuru);
else
%%%方案不存在
%%找出方案能运输最多
pp=[kchy(1)-pfangan(:,1),kchy(2)-pfangan(:,2)];
pp=pp.*(pp>0);
tpp=fmd(sum(pp')==min(sum(pp')));
%%%%选用tpp(1)中方案对乘用车进行更新
P=[tm(1),guanxi {tm(1)} ];
shuru=fangan(tpp(1),: );
[chengyong,wq1,wq2]=xiaochu(chengyong,P,shuru);
end
%%%%首先求出1-1和1-2车辆的装载方案数
chengyong1=[4.61;3.615];
jiaoyun1=[19;24.3];
%%%1-1车的装载方案数
fangan11=jisuan(chengyong1,jiaoyun1(1));
fangan1=hebing(fangan11,fangan11);
L11=zeros(size(fangan1,1),1);
%%%根据装载的车辆总长对方案的进行排序
for i=1:size(fangan1,1)
L11(i)=fangan1(i, 1)*chengyong1(1)+fangan1(i,2)*chengyong1(2);
end

[a,index]=sort(L11);
index=index(end:-1:1);
pfangan1=[];
for i=1:size(fangan1,1)
t=find(index==i);
pfangan1=[pfangan1;[fangan1(i,:),t]];
end
pfangan1=sortrows(pfangan1,3);
pfangan1(1:2,1:2)=pfanganl(2:-1:1,1:2);
%%%% 1-2车的装载方案数
fangan21=jisuan(chengyong1(1:2),jiaoyun1(2));
%%第二个车的第二层
fangan22=hebing(fangan21,fangan21);
%%%对于第二个车
fangan2=hebing(fangan21,fangan22);
%%%根据装载的车辆总长对方案的进行排序
L12=zeros(size(fangan2,1),1);
for i=1:size(fangan2,1)
L12(i)=fangan2(i,1)*chengyong1(1)+fangan2(i,2)*chengyong1(2);
end

[a,index]=sort(L12);
index=index(end:-1:1);
pfangan2=[];
for i=1:size(fangan2,1)
t=find(index==i);
pfangan2=[pfangan2;[fangan2(i,:),t]];
end

%%%%每次选择1辆轿运车1-1和5量轿运车1-2
t1=find(pfanganl1(:,3)==1);
t2=find(pfangan2(:,3)==1);
%%%%从。点运输的时候,要根据达到A点之前的两个点进行判断
pfangan2=sortrows(pfangan2,3);
ss=0;
chengyong=[42,50,33,41;31,0,47,0];
juli=[360,280,236,160]; %%%从点。到各个点的距离(最近的距离)
guanxi={ [2,4], [4], [4],[]};
p=0;
qq=[];
ww=cell(26,1);
k=1;
jiaoyun=[];
while sum(chengyong(:))>0 %%%当还有需求的时候需要运输
q=zeros(1,4);
%%%选择运输的目的(根据距离远近和该点是否有需求)
sumch=sum(chengyong);
tm=find(sumch~=0);
q(1)=tm(1);
%% %ttn(1)就是满足要求的点
%%%%找出tm(1)的临街点和t(1)点进行组合
pt=[tm(1),guanxi{tm(1)}];
%%%%找出可供运输的乘用车I和II的数量
if length(pt)==1
kchy=chengyong(:,pt)';
else
kchy=sum(chengyong(:,pt)');
end
%%%%选择运输方案
%首先,选择使用的车辆(根据20%的限制)
if ss>=5
[chengyong,sq,wq1,wq2]=gengxin(pfangan2,guanxi,tm,chengyong,kchy);
ss=ss-5;
q(2)=2;
jiaoyun=[jiaoyun,2];
else
[chengyong,sq,wq1,wq2]=gengxin(pfangan1,guanxi,tm,chengyong,kchy);
ss=ss+1;
q(2)=1;
jiaoyun=[jiaoyun,1];
end

q(3:4)=sq(1:2);
p=p+1;
qq=[qq;q];
ww{p}={wq1,wq2};
%%%%wq l表示1型车的卸车点和卸车量
%%%%Wq2表示2型车的卸车点和卸车量
end

n=length(ww);
www=cell(n,1);
for i=1:n
a=ww{i}{1};
b=ww{i}{2};
if length(a)}~=0
t=find(a(2,:)==0);
a(:,t)=[];
end
if Iength(b)~=0
t=find(b(2,:)==0);
b(:,t)=[];
end
www{i}={a,b};
end
%%%%%首先,将每次运输的方案求出
%%%%第一行为1,2
%%%%第二行为对应的数量
c=cell(length(www),1);
for i=1:length(www)
d=zeros(2,2);
b=[www{i}{1},www{i}{2}];
d=[];
for j=1:size(b,2)
d=[d,rep(b(1,j),[1,b(2,j)])];
end
e=tabulate(d);
t=find(e(:,2)~=0);
e=e(t,1:2);
c{i}=e;
end

%%%%计算路径
A=zeros(6);
A(1,2:end)=[inf,inf,inf,160,infJ;
A(2,3:end)=[80,inf,200,60];
A(3,4:end)=[inf,120,104];
A(4,5:end)=[76,inf];
A(5,6)=inf;
A=A+A';
lujing=[];
mudi=[];
L=zeros(length(c),1);
for i=1:length(c)
if length(c{i}(:,1))==1
lujing=[lujing;num2str(0)];
if c{i}(1,1)==1
mudi=[mudi;'A'];
else if c{i}(1,1)==2
mudi=[mudi;'B'];
else if c{i}(1,1)==3
mudi=[mudi;'C'];
else if c{i}(1,1)==4
mudi=[mudi;'D'];
end
else
q1=dijkstra(A,1,c{i}(1,1)+1);
q2=dijkstra(A, 1,c {i} (2,1)+1);
if q1>=q2
tq=c{i}(2,1);
else
tq=c{i}(1,1);
end
if tq==1
lujing=[lujing;'A'];
else if tq==2
lujing=[lujing;'B'];
else if tq==3
lujing=[lujing;'C'];
else if tq==4
lujing=[lujing;'D'];
end
if q1>=q2
tqq=c{i}(1,1);
else
tqq=c{i}(2,1);
end
if tqq==1
mudi=[mudi;'A'];
else if tqq==2
mudi=[mudi;'B'];
else if tqq==3
mudi=[mudi;'C'];
else if tqq==4
mudi=[mudi;'D'];
end
end
if length(c {i}(:,1))==1
L(i)=dijkstra(A, 1,c{i}(1,1)+1);
else
q1=dijkstra(A,1,c{i}(1,1)+1);
q2=dijkstra(A, 1,c{i}(2,1)+1);
l1=min(q1,q2);
if q1==l1
l2=dijkstra(A,c{i}(1,1)+1,c{i}(2,1)1l);
else q2==l1
12=dijkstra(A,c{i}(2,1)+1,c{i}(1,1)+1);
end
L(i)=q1+q2;
end
end

ceng=zeros(length(www),2);
wceng=zeros(length(www),4);
flag=1;
%%%%
for i=1:length(www)
for j=1:size(www{i}{1},2)
ceng(i,1)=ceng(i,1)+www{i} {1} (2,j );
end
for j=1:size(www{i}{2},2)
ceng(i,2)=ceng(i,2)+www{i}{2}(2,j);
end
if sum(ceng(i,:)-[4,5])==0
wceng(i,:)=[0 5 4 0];
else if sum(ceng(i,:)-[8,0])==0
wceng(i,:)=[4 0 4 0];
else if sum(ceng(i,:)-[15,0])==0
wceng(i,:)=[10 0 5 0];
else if sum(ceng(i,:)-[[6,12])==0
wceng(i,:)=[0 12 6 0];
else if surn(ceng(i,:)-[6,2])==0
wceng(i,:)=[2 2 4 0];
else if sum(ceng(i,:)-[12,4])==0
wceng(i,:)=[10 0 2 4];
else if sum(ceng(i,:)-[3,5])==0
wceng(i,:)=[3 0 0 5];
else
flag=0;
end
end
xlswrite('d:shuju.xls',jiaoyun','A1:A26');
xlswrite('d:shuju.xls',wceng,'C1:F26');
xlswrite('d:shuju.xls',lujing,'Gl :G26');
xlswrite('d:shuju.xls',mudi,'H1:H26');

3个回答

看上去好模糊一样············能详细描述一下吗?

应该一小段一小段的测试看看哪里出错了

qq_33132671
qq_33132671 最上面的那个函数调用对着吗?
大约 4 年之前 回复

pt=[tm(1),guanxi{tm(1)}];这里时大括号吗

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问