global neighbor_; %邻居
global get_ij;%收益
global w_ij;
global f_ij;
global day_ij;
global f_left;
global w_left;
neighbor_= [1,1,1,0;1,1,1,0;1,1,1,1:0,1,1,1];
global get_mat;
get_mat = -inf(400,600,n,30);
get_mat(:,:,1,1)=0;
mine_money = 1000;
bag = 1200; %负重1200kg
money =10000;%初始资金
w_weight= 3;%水的负重
f_weight = 2;%食物的负重
f_price = 10;%食物的基价
w_price = 5;%水的基价
mine = 4;
vilige = 3;
s = 1;
e = 2;
w = [5,8,10];
f = [7,6,10];%不同天气下食物和水的消耗
day = [2,2,1,3,1;2,3,1,2,2;3,2,1,2,2;2,3,3,2,2;1,1,2,1,3;2,1,1,2,2];%30天的天气情况
day = day';
n= 4;%端点个数
d_n = [0,3,6,8;3,0,3,5;6,3,0,2;8,5,2,0];%端点之间的距离
f_left = -inf(n,n,30);
w_left = -inf(n,n,30);
get_ij = -inf(n,n,30);
w_ij = inf(n,n,30);
f_ij = inf(n,n,30);%食物的开销
day_ij = inf(n,n,30);%需要花多少天
for k = 1:30
temp1 = day_ij(:,:,k);
index_1 = find(day(k:end)~=3);%找到k天后不是沙尘暴天气的索引
judge = (d_n <= length(index_1)& d_n~=O);%找到k天后相互之间可以到达矩阵,不包含到自身
index_2 = find(judge == 1);%找到可以相互到达的各个坐标
temp1(index_2) = index_1(d_n(index_2));%一个距离走一天,需要找×距离个非沙尘暴天气才能走完
temp1(d_n==0)= 0;
day_ij(:,:,k) = temp1;
end
for M = 1:n
for N = 1:n
if(M~= N)
if temp1(M,N)~= inf;%不能到达的地方不考虑
weather = day(k:k + (temp1(M,N)-1));%找到走的这段路的天气情况;
w_ij(M,N,k) = length(weather==1)*(w(1))*2+length(weather ==2)*(w(1))*2 + length(weather==3)*(w(3));
f_ij(M,N,k) = length(weather==1)*(f(1))*2 + length(weather ==2)*(f(1))*2+ length(weather==3)*(f(3));
end
else
if M== mine
f_ij(M,N,k) = day(k) * f(day(k)) * 3;
w_ij(M,N,k) = day(k) * w(day(k))*3;%挖矿的开销是基础开销的三倍
get_ij(M,N,k) = 1000 - f_ij(M,N,k) * f_weight * f_price * 2-w_ij(M,N,k) * w_weight * w_price * 2;
else
f_ij(M,N,k) = day(k) + f(day(k));
end
end
end
end
lost_w = -inf(10,10,10);
lost_f = -inf(10,10,10);
cost_money = -inf(10,10,10);
E = -inf(10,10,10);
E_f = -inf(10,10,10);
E_w =-inf(10,10,10);
w_cost = [3,9];
f_cost = [4,9];
weather = [1,2,1,1,1,1,2,2,2,2]; %十天的天气
p_1(p_1 == 0) = inf;
for t = 1:10
for i = 1:10
for j = 1:10
if i ~= j
lost_w(i,j,t) = 2 * w_cost(weather(t));
lost_f(i,j,t)= 2 * f_cost(weather(t));
cost_money(i,j,t) = lost_w(i,j,t)*5+ lost_f(i,j,t)*10;
E(i,j,t) = cost_money(i,j,t)*(p_1(i,j,t+1).^2*2+1- p_1(i,j,t+1).^2);
E_f(i,j,t)= lost_f(i,j,t)*(p_1(i,j,t+1).*2*2+ 1 - p_1(i,j,t+1).^2);
E_w(i,j,t)= lost_w(i,j,t)*(p_i(i,j,t+1).^2*2+1 - p_1(i,j,t+1).^2);
else
if i==9
lost_w(i,j,t) = 3*w_cost(weather(t));
lost_f(i,j,t)= 3*f_cost(weather(t));
cost_money(i,j,t) = lost_w(i,j,t)*5+ lost_f(i,j,t) * 10;
E(i,j,t) =cost_money(i,j,t) - 200*(p_1(i,j,t+1).^2 * 1/2+1 - p_1(i,j,t+1).^2);
E_f(i,j,t) = lost_f(i,j,t);
E_w(i,j,t) = lost_w(i,j,t);
else
lost_w(i,j,t)= w_cost(weather(t));
lost_f(i,j,t) = f_cost(weather(t));
cost_money(i,j,t) = 5*lost_w(i,j,t) + 10*lost_f(i,j,t);
E(i,j,t) = cost_money(i,j,t);
E_w(i,j,t) = lost_w(i,j,t);
E_f(i,j,t) = lost_f(i,j,t);
end
end
end
end
end
table1 = p_1(:,:,3);
table2 = E(:,:,3);
【以下回答由 GPT 生成】
首先,从给出的代码中可以看出这是一个全局变量的定义和初始化的代码片段。如果无法运行,有几个可能的原因需要检查和解决。
首先,确保您正在使用的是最新版本的Matlab,并且该版本与您的代码兼容。如果您的代码是使用较旧版本的Matlab编写的,可能会导致某些语法错误或不兼容的问题。
请确保代码中所有的变量都已经正确地定义和初始化。从给出的代码中观察到,一些变量(如neighbor_
,get_ij
,w_ij
,f_ij
,day_ij
,f_left
,w_left
)使用了global
关键字进行全局变量的定义。这意味着这些变量在其他函数中也使用,并且可能会影响到代码的运行。
因此,确保在运行代码之前,这些全局变量在其他地方正确地初始化并赋值。
请检查代码中是否存在任何语法错误或拼写错误,这些错误可能会导致代码无法运行。仔细检查代码中的每一行,特别是在变量名、函数名、矩阵定义等方面。
从给出的代码中,我们还可以看到最后一行f_left(1,1,:)= 0; w_left(1,1,:)= bag;
,这些语句使用了两个全局变量f_left
和w_left
,并且在这里将它们的一个子矩阵赋值为0和bag。然而,在Matlab代码中,无法在块注释内部进行赋值操作,因此可能是因为将这些行注释掉而导致的无法运行。
要解决这个问题,可以将这两行代码移动到块注释之外,并确保它们在正确的位置和上下文中。
% 将下面的两行代码从这里移动到块注释之外
f_left(1,1,:)= 0;
w_left(1,1,:)= bag;
以上是根据给出的代码和问题描述所能提供的一些解决方案和建议。如果以上解决方案没有解决您的问题,我无法提供其他具体的解决方法。希望这些解决方案对您有所帮助!如果您有任何其他问题,请随时提问。
【相关推荐】