1151 lines
31 KiB
Matlab
1151 lines
31 KiB
Matlab
clc,clear
|
||
|
||
|
||
%% 数据处理
|
||
|
||
SKK = 5;
|
||
% 增长率
|
||
date = 1+[
|
||
10, 5, 10, 4, 1, 6, -1, -4; % 第一行
|
||
6.5+(SKK-1)/2, 0, 0, 5, 0, 5, -3, -5; % 第二行
|
||
5, -5, -10, 6, -1, 4, -5, -6 % 第三行
|
||
]/100;
|
||
|
||
% 将矩阵的每一行分别赋值给n0
|
||
n0 = date(2, :); %三行分别表示最优环境,最可能环境和鲁棒环境
|
||
|
||
|
||
% 指定文件名和工作表名
|
||
filenama3 = '附件1.xlsx';
|
||
sheetname1 = '乡村的现有耕地';
|
||
|
||
% 读取数据
|
||
A = readmatrix(filenama3, 'Sheet', sheetname1, 'Range', 'C2:C27');
|
||
B = readmatrix(filenama3, 'Sheet', sheetname1, 'Range', 'C28:C35');
|
||
C = readmatrix(filenama3, 'Sheet', sheetname1, 'Range', 'C36:C51');
|
||
D = readmatrix(filenama3, 'Sheet', sheetname1, 'Range', 'C52:C55');
|
||
|
||
% 指定文件名和工作表名
|
||
filenama2 = '附件2.xlsx';
|
||
sheetname2 = '2023年统计的相关数据';
|
||
|
||
% 读取数据
|
||
MP = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F2:F16')';
|
||
MTB = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F17:F31')';
|
||
MS = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F32:F46')';
|
||
MSb = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F47:F65')';
|
||
MSbbb = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F84:F86')';
|
||
MDc = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F66:F83')';
|
||
MDcc = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F87:F90')';
|
||
MZdd = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'F91:F108')';
|
||
MZd = MDc; % 将MDc的值赋给MZd
|
||
|
||
factorr = n0(3); % 每一行的倍数因子
|
||
|
||
% 初始化扩展矩阵
|
||
nummRowss = 8; % 目标行数
|
||
|
||
% 为每个向量初始化扩展矩阵
|
||
MP_expend = zeros(nummRowss, length(MP));
|
||
MTB_expend = zeros(nummRowss, length(MTB));
|
||
MS_expend = zeros(nummRowss, length(MS));
|
||
MSb_expend = zeros(nummRowss, length(MSb));
|
||
MSbbb_expend = zeros(nummRowss, length(MSbbb));
|
||
MDc_expend = zeros(nummRowss, length(MDc));
|
||
MDcc_expend = zeros(nummRowss, length(MDcc));
|
||
MZdd_expend = zeros(nummRowss, length(MZdd));
|
||
MZd_expend = zeros(nummRowss, length(MZd));
|
||
|
||
% 将第一行设置为原始行向量
|
||
MP_expend(1, :) = MP;
|
||
MTB_expend(1, :) = MTB;
|
||
MS_expend(1, :) = MS;
|
||
MSb_expend(1, :) = MSb;
|
||
MSbbb_expend(1, :) = MSbbb;
|
||
MDc_expend(1, :) = MDc;
|
||
MDcc_expend(1, :) = MDcc;
|
||
MZdd_expend(1, :) = MZdd;
|
||
MZd_expend(1, :) = MZd;
|
||
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
% 对每个矩阵的每一行应用倍数因子
|
||
MP_expend(i, :) = MP_expend(i-1, :) * factorr;
|
||
MTB_expend(i, :) = MTB_expend(i-1, :) * factorr;
|
||
MS_expend(i, :) = MS_expend(i-1, :) * factorr;
|
||
MSb_expend(i, :) = MSb_expend(i-1, :) * factorr;
|
||
MSbbb_expend(i, :) = MSbbb_expend(i-1, :) * factorr;
|
||
MDc_expend(i, :) = MDc_expend(i-1, :) * factorr;
|
||
MDcc_expend(i, :) = MDcc_expend(i-1, :) * factorr;
|
||
MZdd_expend(i, :) = MZdd_expend(i-1, :) * factorr;
|
||
MZd_expend(i, :) = MZd_expend(i-1, :) * factorr;
|
||
end
|
||
|
||
% 将扩展后的矩阵重新赋值给原变量名
|
||
MP = MP_expend;
|
||
MTB = MTB_expend;
|
||
MS = MS_expend;
|
||
MSb = MSb_expend;
|
||
MSbbb = MSbbb_expend;
|
||
MDc = MDc_expend;
|
||
MDcc = MDcc_expend;
|
||
MZdd = MZdd_expend;
|
||
MZd = MZd_expend;
|
||
|
||
|
||
|
||
|
||
% 读取G列的数据
|
||
CP = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G2:G16')';
|
||
CT = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G17:G31')';
|
||
CS = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G32:G46')';
|
||
CSb = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G47:G65')';
|
||
CSbb = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G84:G86')';
|
||
CDc = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G66:G83')';
|
||
CDcc = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G87:G90')';
|
||
CZdd = readmatrix(filenama2, 'Sheet', sheetname2, 'Range', 'G91:G108')';
|
||
CZd = CDc; % 将CDc的值赋给CZd
|
||
|
||
|
||
factorr = n0(4); % 每一行的倍数因子
|
||
|
||
% 初始化扩展矩阵
|
||
nummRowss = 8; % 目标行数
|
||
|
||
% 为每个向量初始化扩展矩阵
|
||
CP_expend = zeros(nummRowss, length(CP));
|
||
CT_expend = zeros(nummRowss, length(CT));
|
||
CS_expend = zeros(nummRowss, length(CS));
|
||
CSb_expend = zeros(nummRowss, length(CSb));
|
||
CSbb_expend = zeros(nummRowss, length(CSbb));
|
||
CDc_expend = zeros(nummRowss, length(CDc));
|
||
CDcc_expend = zeros(nummRowss, length(CDcc));
|
||
CZdd_expend = zeros(nummRowss, length(CZdd));
|
||
CZd_expend = zeros(nummRowss, length(CZd));
|
||
|
||
% 将第一行设置为原始行向量
|
||
CP_expend(1, :) = CP;
|
||
CT_expend(1, :) = CT;
|
||
CS_expend(1, :) = CS;
|
||
CSb_expend(1, :) = CSb;
|
||
CSbb_expend(1, :) = CSbb;
|
||
CDc_expend(1, :) = CDc;
|
||
CDcc_expend(1, :) = CDcc;
|
||
CZdd_expend(1, :) = CZdd;
|
||
CZd_expend(1, :) = CZd;
|
||
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
% 对每个矩阵的每一行应用倍数因子
|
||
CP_expend(i, :) = CP_expend(i-1, :) * factorr;
|
||
CT_expend(i, :) = CT_expend(i-1, :) * factorr;
|
||
CS_expend(i, :) = CS_expend(i-1, :) * factorr;
|
||
CSb_expend(i, :) = CSb_expend(i-1, :) * factorr;
|
||
CSbb_expend(i, :) = CSbb_expend(i-1, :) * factorr;
|
||
CDc_expend(i, :) = CDc_expend(i-1, :) * factorr;
|
||
CDcc_expend(i, :) = CDcc_expend(i-1, :) * factorr;
|
||
CZdd_expend(i, :) = CZdd_expend(i-1, :) * factorr;
|
||
CZd_expend(i, :) = CZd_expend(i-1, :) * factorr;
|
||
end
|
||
|
||
% 将扩展后的矩阵重新赋值给原变量名
|
||
CP = CP_expend;
|
||
CT = CT_expend;
|
||
CS = CS_expend;
|
||
CSb = CSb_expend;
|
||
CSbb = CSbb_expend;
|
||
CDc = CDc_expend;
|
||
CDcc = CDcc_expend;
|
||
CZdd = CZdd_expend;
|
||
CZd = CZd_expend;
|
||
|
||
|
||
|
||
|
||
|
||
% 读取H列的数据
|
||
date_SDJ = readcell(filenama2, 'Sheet', sheetname2, 'Range', 'H32:H47');
|
||
date_SDYJ = readcell(filenama2, 'Sheet', sheetname2, 'Range', 'H48:H65');
|
||
date_SDEJ = readcell(filenama2, 'Sheet', sheetname2, 'Range', 'H84:H108');
|
||
|
||
% 初始化存储平均值的数组
|
||
SDJ = zeros(length(date_SDJ), 1);
|
||
SDYJ = zeros(length(date_SDYJ), 1);
|
||
SDEJ = zeros(length(date_SDEJ), 1);
|
||
|
||
% 处理SDJ数据
|
||
for i = 1:length(date_SDJ)
|
||
str = date_SDJ{i}; % 获取单元格数据
|
||
if ismissing(str)
|
||
SDJ(i) = NaN; % 处理缺失数据
|
||
else
|
||
parrts = split(str, '-'); % 按'-'分割字符串
|
||
numms = str2double(parrts); % 将分割后的字符串转换为数字
|
||
SDJ(i) = mean(numms); % 计算平均值
|
||
end
|
||
end
|
||
|
||
% 处理SDYJ数据
|
||
for i = 1:length(date_SDYJ)
|
||
str = date_SDYJ{i};
|
||
if ismissing(str)
|
||
SDYJ(i) = NaN;
|
||
else
|
||
parrts = split(str, '-');
|
||
numms = str2double(parrts);
|
||
SDYJ(i) = mean(numms);
|
||
end
|
||
end
|
||
|
||
% 处理SDEJ数据
|
||
for i = 1:length(date_SDEJ)
|
||
str = date_SDEJ{i};
|
||
if ismissing(str)
|
||
SDEJ(i) = NaN;
|
||
else
|
||
parrts = split(str, '-');
|
||
numms = str2double(parrts);
|
||
SDEJ(i) = mean(numms);
|
||
end
|
||
end
|
||
|
||
|
||
|
||
|
||
SDJ = SDJ';
|
||
|
||
% 初始化矩阵
|
||
nummRowss = 8; % 目标行数
|
||
nummCols = length(SDJ); % 列数与 SDJ 的长度相同
|
||
factorr = n0(5); % 取 n0 的第五个元素作为倍数因子
|
||
result = zeros(nummRowss, nummCols); % 初始化结果矩阵
|
||
|
||
% 将第一行设置为 SDJ
|
||
result(1, :) = SDJ;
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
result(i, :) = result(i-1, :) * factorr; % 每一行是上一行的 n0(5) 倍
|
||
end
|
||
SDJ = result;
|
||
|
||
|
||
SDYJ = SDYJ';
|
||
% 初始化矩阵
|
||
nummRowss = 8; % 目标行数
|
||
nummCols = length(SDYJ); % 列数与 SDJ 的长度相同
|
||
factorr = n0(6); % 取 n0 的第五个元素作为倍数因子
|
||
result = zeros(nummRowss, nummCols); % 初始化结果矩阵
|
||
|
||
% 将第一行设置为 SDYJ
|
||
result(1, :) = SDYJ;
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
result(i, :) = result(i-1, :) * factorr; % 每一行是上一行的 n0(5) 倍
|
||
end
|
||
SDYJ = result;
|
||
|
||
|
||
SDEJ = SDEJ';
|
||
% 取 n0 向量中的倍数因子
|
||
factorr6 = n0(6); % 对于第4,5,6元素
|
||
factorr7 = n0(7); % 对于第7元素
|
||
factorr8 = n0(8); % 对于其他元素
|
||
|
||
% 初始化矩阵
|
||
nummRowss = 8; % 目标行数
|
||
nummCols = length(SDEJ); % 列数与 SDEJ 的长度相同
|
||
result = zeros(nummRowss, nummCols); % 初始化结果矩阵
|
||
|
||
% 将第一行设置为原始的 SDEJ
|
||
result(1, :) = SDEJ;
|
||
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
% 对于每一行,根据条件进行扩展
|
||
rowPrevious = result(i-1, :); % 取得上一行
|
||
newRow = rowPrevious; % 初始化新行
|
||
|
||
% 对于第4,5,6元素
|
||
newRow(4:6) = rowPrevious(4:6) * factorr7;
|
||
|
||
% 对于第7元素
|
||
newRow(7) = rowPrevious(7) * factorr8;
|
||
|
||
% 其他元素
|
||
newRow([1:3, 8:end]) = rowPrevious([1:3, 8:end]) * factorr6;
|
||
|
||
% 将新行赋值到结果矩阵
|
||
result(i, :) = newRow;
|
||
end
|
||
SDEJ = result;
|
||
|
||
|
||
% 指定文件名和工作表名
|
||
filenama = '附件2.xlsx';
|
||
sheetname = '2023年的农作物种植情况';
|
||
|
||
% 读取整个B列和E列的数据
|
||
B_date = readmatrix(filenama, 'Sheet', sheetname, 'Range', 'B2:B88');
|
||
E_date = readmatrix(filenama, 'Sheet', sheetname, 'Range', 'E2:E88');
|
||
|
||
% 任务1: 创建并填充a0矩阵
|
||
a0 = zeros(26, 15);
|
||
for i = 1:26
|
||
colIndex = B_date(i);
|
||
if colIndex >= 1 && colIndex <= 15
|
||
a0(i, colIndex) = E_date(i);
|
||
end
|
||
end
|
||
|
||
% 任务2: 创建并填充b0矩阵
|
||
b0 = zeros(8, 19); % 行数增加到8以容纳最后的设置
|
||
evenRowss = [28, 30, 32, 34, 36, 38];
|
||
for i = 1:6
|
||
colIndex = B_date(evenRowss(i) - 1) - 16;
|
||
if colIndex >= 1 && colIndex <= 19
|
||
b0(i, colIndex) = E_date(evenRowss(i) - 1);
|
||
end
|
||
end
|
||
b0(7, 1) = 22; % 手动设置的值
|
||
b0(8, 1) = 20;
|
||
|
||
% 任务3: 创建并填充bb0矩阵
|
||
bb0 = zeros(8, 3);
|
||
oddRowss = [29, 31, 33, 35, 37, 39];
|
||
for i = 1:6
|
||
colIndex = B_date(oddRowss(i) - 1) - 34;
|
||
if colIndex >= 1 && colIndex <= 3
|
||
bb0(i, colIndex) = E_date(oddRowss(i) - 1);
|
||
end
|
||
end
|
||
|
||
% 任务4: 创建并填充c0矩阵
|
||
filenama = '附件2.xlsx';
|
||
sheetname = '2023年的农作物种植情况';
|
||
|
||
% 读取B列和E列的指定行数据
|
||
RowssC0 = [42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 71, 73];
|
||
B_date_c0 = readmatrix(filenama, 'Sheet', sheetname, 'Range', ['B' num2str(min(RowssC0)) ':B' num2str(max(RowssC0))]);
|
||
E_date_c0 = readmatrix(filenama, 'Sheet', sheetname, 'Range', ['E' num2str(min(RowssC0)) ':E' num2str(max(RowssC0))]);
|
||
|
||
% 初始化零矩阵c0,长16, 宽18
|
||
c0 = zeros(16, 18);
|
||
|
||
% 行映射,注意第15行用两次
|
||
rowMapC0 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16];
|
||
|
||
% 填充c0矩阵
|
||
for i = 1:length(RowssC0)
|
||
colIndex = B_date_c0(i) - 16; % 计算横坐标
|
||
rowIndex = rowMapC0(i); % 获取映射的行索引
|
||
if colIndex >= 1 && colIndex <= 18
|
||
c0(rowIndex, colIndex) = E_date_c0(i); % 存储数据
|
||
end
|
||
end
|
||
|
||
% 任务5: 创建并填充cc0矩阵
|
||
cc0 = zeros(16, 4);
|
||
selectedRowssCC0 = [43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 72, 74] - 1;
|
||
for i = 1:length(selectedRowssCC0)
|
||
colIndex = B_date(selectedRowssCC0(i)) - 37;
|
||
if colIndex >= 1 && colIndex <= 4
|
||
cc0(i, colIndex) = E_date(selectedRowssCC0(i));
|
||
end
|
||
end
|
||
|
||
% 任务6: 创建并填充d0矩阵
|
||
d0 = zeros(4, 18);
|
||
RowssD0 = [75, 76, 79, 80, 83, 86] - 1;
|
||
rowIndices = [1, 1, 2, 2, 3, 4]; % 映射到相应的行数
|
||
for i = 1:length(RowssD0)
|
||
colIndex = B_date(RowssD0(i)) - 16;
|
||
if colIndex >= 1 && colIndex <= 18
|
||
d0(rowIndices(i), colIndex) = E_date(RowssD0(i));
|
||
end
|
||
end
|
||
|
||
% 任务7: 创建并填充dd0矩阵
|
||
dd0 = zeros(4, 18);
|
||
RowssDD0 = [77, 78, 81, 82, 84, 85, 87, 88] - 1;
|
||
rowIndices = [1, 1, 2, 2, 3, 3, 4, 4]; % 映射到相应的行数
|
||
for i = 1:length(RowssDD0)
|
||
colIndex = B_date(RowssDD0(i)) - 16;
|
||
if colIndex >= 1 && colIndex <= 18
|
||
dd0(rowIndices(i), colIndex) = E_date(RowssDD0(i));
|
||
end
|
||
end
|
||
|
||
GDJ =zeros(1,16);
|
||
GDYJ =zeros(1,18);
|
||
GDEJ =zeros(1,25);
|
||
% 预期收获(斤)
|
||
|
||
MP
|
||
|
||
|
||
GDJ(1:15) = MP(1,:).*sum(a0(1:6,:),1) + MTB(1,:).*sum(a0(7:20,:),1) + MS(1,:).*sum(a0(21:26,:),1);
|
||
GDJ(16) = MSb(1,1)*sum(b0(:,1),1);
|
||
GDYJ = MSb(1,2:19).*sum(b0(:,2:19),1) + MDc(1,:).*sum(c0(:,:),1) + MZd(1,:).*sum(d0(:,:),1);
|
||
GDEJ(1:3) = MSbbb(1,:).*sum(bb0(:,:),1);
|
||
GDEJ(4:7) = MDcc(1,:).*sum(cc0(:,:),1);
|
||
GDEJ(8:end) = MZdd(1,:).*sum(dd0(:,:),1);
|
||
|
||
|
||
factorr1 = n0(1); % 对于第1,2元素
|
||
factorr2 = n0(2); % 对于其他元素
|
||
|
||
% 初始化矩阵
|
||
nummRowss = 8; % 目标行数
|
||
nummCols = length(GDJ); % 列数与 GDJ 的长度相同
|
||
GDJ_expend = zeros(nummRowss, nummCols); % 初始化结果矩阵
|
||
|
||
% 将第一行设置为原始的 GDJ
|
||
GDJ_expend(1, :) = GDJ;
|
||
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
% 取得上一行
|
||
rowPrevious = GDJ_expend(i-1, :);
|
||
% 初始化新行
|
||
newRow = rowPrevious;
|
||
|
||
% 对于第1,2元素
|
||
newRow(1:2) = rowPrevious(1:2) * factorr1;
|
||
|
||
% 对于其他元素
|
||
newRow(3:end) = rowPrevious(3:end) * factorr2;
|
||
|
||
% 将新行赋值到结果矩阵
|
||
GDJ_expend(i, :) = newRow;
|
||
end
|
||
|
||
factorr = n0(2); % 对于所有元素的倍数因子
|
||
|
||
% 初始化矩阵
|
||
nummRowss = 8; % 目标行数
|
||
nummCols_GDYJ = length(GDYJ); % GDYJ 的列数
|
||
nummCols_GDEJ = length(GDEJ); % GDEJ 的列数
|
||
|
||
% 初始化扩展矩阵
|
||
GDYJ_expend = zeros(nummRowss, nummCols_GDYJ); % GDYJ 扩展矩阵
|
||
GDEJ_expend = zeros(nummRowss, nummCols_GDEJ); % GDEJ 扩展矩阵
|
||
|
||
% 将第一行设置为原始行向量
|
||
GDYJ_expend(1, :) = GDYJ;
|
||
GDEJ_expend(1, :) = GDEJ;
|
||
|
||
% 计算其余的行
|
||
for i = 2:nummRowss
|
||
% 取得上一行
|
||
rowPrevious_GDYJ = GDYJ_expend(i-1, :);
|
||
rowPrevious_GDEJ = GDEJ_expend(i-1, :);
|
||
|
||
% 初始化新行
|
||
newRow_GDYJ = rowPrevious_GDYJ;
|
||
newRow_GDEJ = rowPrevious_GDEJ;
|
||
|
||
% 将每一行的元素乘以倍数因子
|
||
newRow_GDYJ = rowPrevious_GDYJ * factorr;
|
||
newRow_GDEJ = rowPrevious_GDEJ * factorr;
|
||
|
||
% 将新行赋值到结果矩阵
|
||
GDYJ_expend(i, :) = newRow_GDYJ;
|
||
GDEJ_expend(i, :) = newRow_GDEJ;
|
||
end
|
||
|
||
|
||
GDJ = GDJ_expend;
|
||
GDYJ = GDYJ_expend;
|
||
GDEJ = GDEJ_expend;
|
||
|
||
%% 回归分析
|
||
|
||
|
||
|
||
r1 = CP(1,:)';
|
||
r2 = SDJ(1,1:15)';
|
||
r3 = GDJ(1,1:15)';
|
||
|
||
% 假设 r1, r2 和 r3 是 15x1 列向量
|
||
X = [r1, r2]; % 自变量矩阵
|
||
Y = r3; % 响应变量向量
|
||
|
||
% 创建回归模型
|
||
mdl = fitlm(X, Y);
|
||
|
||
% 显示模型的详细信息
|
||
disp(mdl);
|
||
|
||
% 提取回归系数及其统计信息
|
||
coefficients = mdl.Coefficients;
|
||
disp(coefficients);
|
||
|
||
% 绘制残差图
|
||
figure;
|
||
subplot(1,1,1);
|
||
plotResiduals(mdl, 'fitted');
|
||
title('拟合残差');
|
||
figure;
|
||
% 绘制正态概率图
|
||
subplot(1,1,1);
|
||
plotResiduals(mdl, 'probability');
|
||
title('正态概率图');
|
||
|
||
|
||
%% 变量设计
|
||
|
||
a = sdpvar(26,15,8);
|
||
b = sdpvar(8,19,8);
|
||
bb = sdpvar(8,3,8);
|
||
c = sdpvar(16,18,8);
|
||
cc = sdpvar(16,4,8);
|
||
d = sdpvar(4,18,8);
|
||
dd = sdpvar(4,18,8);
|
||
|
||
b_temp = binvar(8,1,8);
|
||
|
||
arr = binvar(26,15,8);
|
||
br = binvar(8,19,8);
|
||
bbr = binvar(8,3,8);
|
||
cr = binvar(16,18,8);
|
||
ccr = binvar(16,4,8);
|
||
dr = binvar(4,18,8);
|
||
ddr = binvar(4,18,8);
|
||
|
||
mDJ= sdpvar(1,16,8);
|
||
mDYJ= sdpvar(1,18,8);
|
||
mDEJ= sdpvar(1,25,8);
|
||
cDJ= sdpvar(1,16,8);
|
||
cDYJ= sdpvar(1,18,8);
|
||
cDEJ= sdpvar(1,25,8);
|
||
QDJ= sdpvar(1,16,8);
|
||
QDYJ= sdpvar(1,18,8);
|
||
QDEJ= sdpvar(1,25,8);
|
||
|
||
% = sdpvar(,,);
|
||
% = sdpvar(,,);
|
||
|
||
% 约束设置
|
||
Constraintsshb = [];
|
||
|
||
% 2023年数据载入
|
||
Constraintsshb = [Constraintsshb,a(:,:,1) == a0];
|
||
Constraintsshb = [Constraintsshb,b(:,:,1) == b0];
|
||
Constraintsshb = [Constraintsshb,bb(:,:,1) == bb0];
|
||
Constraintsshb = [Constraintsshb,c(:,:,1) == c0];
|
||
Constraintsshb = [Constraintsshb,cc(:,:,1) == cc0];
|
||
Constraintsshb = [Constraintsshb,d(:,:,1) == d0];
|
||
Constraintsshb = [Constraintsshb,dd(:,:,1) == dd0];
|
||
|
||
|
||
% % 水浇地每年可以单季种植水稻或两季种植蔬菜作物。
|
||
Constraintsshb = [Constraintsshb, sum(bb,2) <= b_temp*10e5];
|
||
Constraintsshb = [Constraintsshb, 10e-4-b(:,1,2:8)<=b_temp(:,:,2:8)*100];
|
||
Constraintsshb = [Constraintsshb, 100-b(:,1,2:8)>=b_temp(:,:,2:8)*100];
|
||
|
||
|
||
|
||
|
||
|
||
% 种植面积约束
|
||
|
||
Constraintsshb = [Constraintsshb, sum(arr,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*arr(:,:,2:8)<=a(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(A, [1, 15, 7]).*arr(:,:,2:8)>=a(:,:,2:8)];
|
||
|
||
Constraintsshb = [Constraintsshb, sum(br,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*br(:,:,2:8)<=b(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(B, [1, 19, 7]).*br(:,:,2:8)>=b(:,:,2:8)];
|
||
|
||
Constraintsshb = [Constraintsshb, sum(bbr,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*bbr(:,:,2:8)<=bb(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(B, [1, 3, 7]).*bbr(:,:,2:8)>=bb(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, sum(cr,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*cr(:,:,2:8)<=c(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(C, [1, 18, 7]).*cr(:,:,2:8)>=c(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, sum(ccr,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*ccr(:,:,2:8)<=cc(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(C, [1, 4, 7]).*ccr(:,:,2:8)>=cc(:,:,2:8)];
|
||
|
||
Constraintsshb = [Constraintsshb, sum(dr,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*dr(:,:,2:8)<=d(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(D, [1, 18, 7]).*dr(:,:,2:8)>=d(:,:,2:8)];
|
||
|
||
Constraintsshb = [Constraintsshb, sum(ddr,2) <= SKK];
|
||
Constraintsshb = [Constraintsshb, 0.1*ddr(:,:,2:8)<=dd(:,:,2:8)];
|
||
Constraintsshb = [Constraintsshb, repmat(D, [1, 18, 7]).*ddr(:,:,2:8)>=dd(:,:,2:8)];
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
% 连续两年种植不同
|
||
Constraintsshb = [Constraintsshb, arr(:,:,1:7)+arr(:,:,2:8)<=1];
|
||
Constraintsshb = [Constraintsshb, br(:,:,1:7)+br(:,:,2:8)<=1];
|
||
Constraintsshb = [Constraintsshb, bbr(:,:,1:7)+bbr(:,:,2:8)<=1];
|
||
Constraintsshb = [Constraintsshb, cr(:,:,1:7)+cr(:,:,2:8)<=1];
|
||
Constraintsshb = [Constraintsshb, ccr(:,:,1:7)+ccr(:,:,2:8)<=1];
|
||
Constraintsshb = [Constraintsshb, dr(:,:,1:7)+dr(:,:,2:8)<=1];
|
||
Constraintsshb = [Constraintsshb, ddr(:,:,1:7)+ddr(:,:,2:8)<=1];
|
||
|
||
|
||
% 三年种一次豆类
|
||
|
||
for i =1:6
|
||
Constraintsshb = [Constraintsshb, sum(a(:,1:5,i)+a(:,1:5,i+1)+a(:,1:5,i+2),2)>=A*0.5];
|
||
Constraintsshb = [Constraintsshb, sum(b(:,2:4,i)+b(:,2:4,i+1)+b(:,2:4,i+2),2)>=B*0.5];
|
||
Constraintsshb = [Constraintsshb, sum(c(:,1:3,i)+c(:,1:3,i+1)+c(:,1:3,i+2),2)>=C*0.5];
|
||
Constraintsshb = [Constraintsshb, sum(d(:,1:3,i)+d(:,1:3,i+1)+d(:,1:3,i+2)+dd(:,1:3,i)+dd(:,1:3,i+1)+dd(:,1:3,i+2),2)>=D*0.5];
|
||
|
||
|
||
end
|
||
|
||
|
||
|
||
%% 目标函数
|
||
|
||
% 收获(斤)
|
||
MP= permute(MP, [2, 3,1]);
|
||
MP= permute(MP, [2, 1, 3]);
|
||
% 对 CP 进行相同操作
|
||
CP = permute(CP, [2, 3, 1]);
|
||
CP = permute(CP, [2, 1, 3]);
|
||
|
||
% 对 CT 进行相同操作
|
||
CT = permute(CT, [2, 3, 1]);
|
||
CT = permute(CT, [2, 1, 3]);
|
||
|
||
% 对 CS 进行相同操作
|
||
CS = permute(CS, [2, 3, 1]);
|
||
CS = permute(CS, [2, 1, 3]);
|
||
|
||
% 对 CSb 进行相同操作
|
||
CSb = permute(CSb, [2, 3, 1]);
|
||
CSb = permute(CSb, [2, 1, 3]);
|
||
|
||
% 对 CSbb 进行相同操作
|
||
CSbb = permute(CSbb, [2, 3, 1]);
|
||
CSbb = permute(CSbb, [2, 1, 3]);
|
||
|
||
% 对 CDc 进行相同操作
|
||
CDc = permute(CDc, [2, 3, 1]);
|
||
CDc = permute(CDc, [2, 1, 3]);
|
||
|
||
% 对 CDcc 进行相同操作
|
||
CDcc = permute(CDcc, [2, 3, 1]);
|
||
CDcc = permute(CDcc, [2, 1, 3]);
|
||
|
||
% 对 CZdd 进行相同操作
|
||
CZdd = permute(CZdd, [2, 3, 1]);
|
||
CZdd = permute(CZdd, [2, 1, 3]);
|
||
|
||
% 对 CZd 进行相同操作
|
||
CZd = permute(CZd, [2, 3, 1]);
|
||
CZd = permute(CZd, [2, 1, 3]);
|
||
|
||
% 对 MTB 进行相同操作
|
||
MTB = permute(MTB, [2, 3, 1]);
|
||
MTB = permute(MTB, [2, 1, 3]);
|
||
|
||
% 对 MS 进行相同操作
|
||
MS = permute(MS, [2, 3, 1]);
|
||
MS = permute(MS, [2, 1, 3]);
|
||
|
||
% 对 MSb 进行相同操作
|
||
MSb = permute(MSb, [2, 3, 1]);
|
||
MSb = permute(MSb, [2, 1, 3]);
|
||
|
||
% 对 MSbbb 进行相同操作
|
||
MSbbb = permute(MSbbb, [2, 3, 1]);
|
||
MSbbb = permute(MSbbb, [2, 1, 3]);
|
||
|
||
% 对 MDc 进行相同操作
|
||
MDc = permute(MDc, [2, 3, 1]);
|
||
MDc = permute(MDc, [2, 1, 3]);
|
||
|
||
% 对 MDcc 进行相同操作
|
||
MDcc = permute(MDcc, [2, 3, 1]);
|
||
MDcc = permute(MDcc, [2, 1, 3]);
|
||
|
||
% 对 MZdd 进行相同操作
|
||
MZdd = permute(MZdd, [2, 3, 1]);
|
||
MZdd = permute(MZdd, [2, 1, 3]);
|
||
|
||
% 对 MZd 进行相同操作
|
||
MZd = permute(MZd, [2, 3, 1]);
|
||
MZd = permute(MZd, [2, 1, 3]);
|
||
|
||
|
||
mDJ(1,1:15,:) = MP.*sum(a(1:6,:,:),1) + MTB.*sum(a(7:20,:,:),1) + repmat(MS, [1, 1, 1]).*sum(a(21:26,:,:),1);
|
||
mDJ(1,16,:) = repmat(MSb(1,1,:), [1, 1, 1]).*sum(b(:,1,:),1);
|
||
mDYJ = repmat(MSb(1,2:19,:), [1, 1, 1]).*sum(b(:,2:19,:),1) + repmat(MDc, [1, 1, 1]).*sum(c(:,:,:),1) + repmat(MZd, [1, 1, 1]).*sum(d(:,:,:),1);
|
||
mDEJ(1,1:3,:) = repmat(MSbbb, [1, 1, 1]).*sum(bb(:,:,:),1);
|
||
mDEJ(1,4:7,:) = repmat(MDcc, [1, 1, 1]).*sum(cc(:,:,:),1);
|
||
mDEJ(1,8:end,:) = repmat(MZdd, [1, 1, 1]).*sum(dd(:,:,:),1);
|
||
|
||
|
||
% 总成本
|
||
|
||
cDJ(1,1:15,:) = repmat(CP, [1, 1, 1]).*sum(a(1:6,:,:),1) + repmat(CT, [1, 1, 1]).*sum(a(7:20,:,:),1) + repmat(CS, [1, 1, 1]).*sum(a(21:26,:,:),1);
|
||
cDJ(1,16,:) = repmat(CSb(1,1,:), [1, 1, 1]).*sum(b(:,1,:),1);
|
||
cDYJ = repmat(CSb(1,2:19,:), [1, 1, 1]).*sum(b(:,2:19,:),1) + repmat(CDc, [1, 1, 1]).*sum(c(:,:,:),1) + repmat(CZd, [1, 1, 1]).*sum(d(:,:,:),1);
|
||
cDEJ(1,1:3,:) = repmat(CSbb, [1, 1, 1]).*sum(bb(:,:,:),1);
|
||
cDEJ(1,4:7,:) = repmat(CDcc, [1, 1, 1]).*sum(cc(:,:,:),1);
|
||
cDEJ(1,8:end,:) = repmat(CZdd, [1, 1, 1]).*sum(dd(:,:,:),1);
|
||
|
||
|
||
|
||
% 最终收益
|
||
|
||
% Constraintsshb = [Constraintsshb, QDJ(:,:,2:8)<=mDJ(:,:,2:8)];
|
||
% Constraintsshb = [Constraintsshb, QDJ(:,:,2:8)<=repmat(GDJ, [1, 1, 7])];
|
||
% Constraintsshb = [Constraintsshb, QDYJ(:,:,2:8)<=mDYJ(:,:,2:8)];
|
||
% Constraintsshb = [Constraintsshb, QDYJ(:,:,2:8)<=repmat(GDYJ, [1, 1, 7])];
|
||
% Constraintsshb = [Constraintsshb, QDEJ(:,:,2:8)<=mDEJ(:,:,2:8)];
|
||
% Constraintsshb = [Constraintsshb, QDEJ(:,:,2:8)<=repmat(GDEJ, [1, 1, 7])];
|
||
|
||
GDJ = permute(GDJ, [2, 3, 1]);
|
||
GDJ = permute(GDJ, [2, 1, 3]);
|
||
GDYJ = permute(GDYJ, [2, 3, 1]);
|
||
GDYJ = permute(GDYJ, [2, 1, 3]);
|
||
GDEJ = permute(GDEJ, [2, 3, 1]);
|
||
GDEJ = permute(GDEJ, [2, 1, 3]);
|
||
|
||
Constraintsshb = [Constraintsshb, mDJ(:,:,2:8)<=(GDJ(:,:,2:8))*1];
|
||
Constraintsshb = [Constraintsshb, mDYJ(:,:,2:8)<=(GDYJ(:,:,2:8))*1];
|
||
Constraintsshb = [Constraintsshb, mDEJ(:,:,2:8)<=(GDEJ(:,:,2:8))*1];
|
||
|
||
|
||
SDJ = permute(SDJ, [2, 3, 1]);
|
||
SDJ = permute(SDJ, [2, 1, 3]);
|
||
SDYJ = permute(SDYJ, [2, 3, 1]);
|
||
SDYJ = permute(SDYJ, [2, 1, 3]);
|
||
SDEJ = permute(SDEJ, [2, 3, 1]);
|
||
SDEJ = permute(SDEJ, [2, 1, 3]);
|
||
|
||
OBJ2 = sum(sum(sum( mDJ(:,:,2:8).* SDJ (:,:,2:8)))) + sum(sum(sum( mDYJ(:,:,2:8).* SDYJ(:,:,2:8) ))) + sum(sum(sum( mDEJ(:,:,2:8).* SDEJ(:,:,2:8) ))) - sum(sum(sum( cDJ(:,:,2:8)))) -sum(sum(sum( cDYJ(:,:,2:8)))) -sum(sum(sum( cDEJ(:,:,2:8)))) ;
|
||
|
||
ops = sdpsettings(...
|
||
'solver', 'gurobi', ...
|
||
'gurobi.timelimit', 60, ...
|
||
'gurobi.MIPFocus', 1, ...
|
||
'gurobi.Heuristics', 0.5, ...
|
||
'gurobi.NodeLimit', 1000, ...
|
||
'allowmilp', 1, ...
|
||
'debug', 1, ...
|
||
'verbose', 0 ...
|
||
);
|
||
obj=-OBJ2;
|
||
result=optimize(Constraintsshb,obj);
|
||
if result.problem==0
|
||
disp('!!!!!!!!!!!!Solver thinks it is feasible')
|
||
elseif result.problem == 1
|
||
disp('!!!!!!!!!!!!Solver thinks it is infeasible')
|
||
else
|
||
disp('!!!!!!!!!!!!Timeout, Display the current optimal solution')
|
||
end
|
||
value(obj)
|
||
|
||
|
||
a = value(a);
|
||
b = value(b);
|
||
c = value(c);
|
||
d = value(d);
|
||
bb = value(bb);
|
||
cc = value(cc);
|
||
dd = value(dd);
|
||
|
||
|
||
|
||
%% 数据写入
|
||
|
||
% 创建矩阵数据2024
|
||
a3 = a(:,:,2);
|
||
b1 = b(:,:,2);
|
||
bb1 = bb(:,:,2);
|
||
c1 = c(:,:,2);
|
||
cc1 = cc(:,:,2);
|
||
d1 = d(:,:,2);
|
||
dd1 = dd(:,:,2);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2024';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
% 创建矩阵数据2025
|
||
a3 = a(:,:,3);
|
||
b1 = b(:,:,3);
|
||
bb1 = bb(:,:,3);
|
||
c1 = c(:,:,3);
|
||
cc1 = cc(:,:,3);
|
||
d1 = d(:,:,3);
|
||
dd1 = dd(:,:,3);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2025';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
|
||
|
||
% 创建矩阵数据2026
|
||
a3 = a(:,:,4);
|
||
b1 = b(:,:,4);
|
||
bb1 = bb(:,:,4);
|
||
c1 = c(:,:,4);
|
||
cc1 = cc(:,:,4);
|
||
d1 = d(:,:,4);
|
||
dd1 = dd(:,:,4);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2026';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
% 创建矩阵数据2027
|
||
a3 = a(:,:,5);
|
||
b1 = b(:,:,5);
|
||
bb1 = bb(:,:,5);
|
||
c1 = c(:,:,5);
|
||
cc1 = cc(:,:,5);
|
||
d1 = d(:,:,5);
|
||
dd1 = dd(:,:,5);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2027';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
% 创建矩阵数据2028
|
||
a3 = a(:,:,6);
|
||
b1 = b(:,:,6);
|
||
bb1 = bb(:,:,6);
|
||
c1 = c(:,:,6);
|
||
cc1 = cc(:,:,6);
|
||
d1 = d(:,:,6);
|
||
dd1 = dd(:,:,6);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2028';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
|
||
% 创建矩阵数据2029
|
||
a3 = a(:,:,7);
|
||
b1 = b(:,:,7);
|
||
bb1 = bb(:,:,7);
|
||
c1 = c(:,:,7);
|
||
cc1 = cc(:,:,7);
|
||
d1 = d(:,:,7);
|
||
dd1 = dd(:,:,7);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2029';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
% 创建矩阵数据2030
|
||
a3 = a(:,:,8);
|
||
b1 = b(:,:,8);
|
||
bb1 = bb(:,:,8);
|
||
c1 = c(:,:,8);
|
||
cc1 = cc(:,:,8);
|
||
d1 = d(:,:,8);
|
||
dd1 = dd(:,:,8);
|
||
|
||
% Excel 文件和工作表名称
|
||
filenama = 'result2.xlsx';
|
||
sheetname = '2030';
|
||
|
||
% 写入 Excel 文件
|
||
% 1. 首先将 C2 到 AQ83 全部写为 0
|
||
xlswrite(filenama, zeros(82, 43), sheetname, 'C2:AQ83');
|
||
|
||
% 2. 将 a3 写在 C2 到 Q27
|
||
xlswrite(filenama, a3, sheetname, 'C2');
|
||
|
||
% 3. 将 b1 写在 R28 到 AJ35
|
||
xlswrite(filenama, b1, sheetname, 'R28');
|
||
|
||
% 4. 将 bb1 写在 AK56 到 AM63
|
||
xlswrite(filenama, bb1, sheetname, 'AK56');
|
||
|
||
% 5. 将 c1 写在 R36 到 AJ51
|
||
xlswrite(filenama, c1, sheetname, 'R36');
|
||
|
||
% 6. 将 cc1 写在 AN36 到 AQ51
|
||
xlswrite(filenama, cc1, sheetname, 'AN36');
|
||
|
||
% 7. 将 d1 写在 R52 到 AJ55
|
||
xlswrite(filenama, d1, sheetname, 'R52');
|
||
|
||
% 8. 将 dd1 写在 R80 到 AJ83
|
||
xlswrite(filenama, dd1, sheetname, 'R80');
|
||
|
||
|
||
|
||
%% 结果计算
|
||
% 收获(斤)
|
||
mDJ(1,1:15,:) = MP.*sum(a(1:6,:,:),1) + MTB.*sum(a(7:20,:,:),1) + repmat(MS, [1, 1, 1]).*sum(a(21:26,:,:),1);
|
||
mDJ(1,16,:) = repmat(MSb(1,1,:), [1, 1, 1]).*sum(b(:,1,:),1);
|
||
mDYJ = repmat(MSb(1,2:19,:), [1, 1, 1]).*sum(b(:,2:19,:),1) + repmat(MDc, [1, 1, 1]).*sum(c(:,:,:),1) + repmat(MZd, [1, 1, 1]).*sum(d(:,:,:),1);
|
||
mDEJ(1,1:3,:) = repmat(MSbbb, [1, 1, 1]).*sum(bb(:,:,:),1);
|
||
mDEJ(1,4:7,:) = repmat(MDcc, [1, 1, 1]).*sum(cc(:,:,:),1);
|
||
mDEJ(1,8:end,:) = repmat(MZdd, [1, 1, 1]).*sum(dd(:,:,:),1);
|
||
|
||
|
||
% 总成本
|
||
|
||
cDJ(1,1:15,:) = repmat(CP, [1, 1, 1]).*sum(a(1:6,:,:),1) + repmat(CT, [1, 1, 1]).*sum(a(7:20,:,:),1) + repmat(CS, [1, 1, 1]).*sum(a(21:26,:,:),1);
|
||
cDJ(1,16,:) = repmat(CSb(1,1,:), [1, 1, 1]).*sum(b(:,1,:),1);
|
||
cDYJ = repmat(CSb(1,2:19,:), [1, 1, 1]).*sum(b(:,2:19,:),1) + repmat(CDc, [1, 1, 1]).*sum(c(:,:,:),1) + repmat(CZd, [1, 1, 1]).*sum(d(:,:,:),1);
|
||
cDEJ(1,1:3,:) = repmat(CSbb, [1, 1, 1]).*sum(bb(:,:,:),1);
|
||
cDEJ(1,4:7,:) = repmat(CDcc, [1, 1, 1]).*sum(cc(:,:,:),1);
|
||
cDEJ(1,8:end,:) = repmat(CZdd, [1, 1, 1]).*sum(dd(:,:,:),1);
|
||
|
||
|
||
|
||
|
||
% 最终收益
|
||
|
||
|
||
|
||
|
||
|
||
|
||
% 初始化 beneits 为 0
|
||
beneits = 0;
|
||
|
||
|
||
mDJ1 = mDJ(:,:,2:8);
|
||
SDJ1 = repmat(SDJ, [1, 1, 7]);
|
||
GDJ1 = repmat(GDJ, [1, 1, 7]);
|
||
|
||
% 获取 mDJ1, GDJ1 和 SDJ1 的维度
|
||
[dim1, dim2, dim3] = size(mDJ1);
|
||
|
||
|
||
% 遍历所有元素并更新 beneits
|
||
for i = 1:dim1
|
||
for j = 1:dim2
|
||
for k = 1:dim3
|
||
if mDJ1(i,j,k) <= GDJ1(i,j,k)
|
||
% 如果 mDJ 小于或等于 GDJ
|
||
beneits = beneits + mDJ1(i,j,k) * SDJ1(i,j,k);
|
||
else
|
||
% 如果 mDJ 大于 GDJ
|
||
beneits = beneits + GDJ1(i,j,k) * SDJ1(i,j,k) ...
|
||
+ (mDJ1(i,j,k) - GDJ1(i,j,k)) * 0;
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
mDYJ1 = mDYJ(:,:,2:8);
|
||
SDYJ1 = repmat(SDYJ, [1, 1, 7]);
|
||
GDYJ1 = repmat(GDYJ, [1, 1, 7]);
|
||
|
||
% 获取 mDJ1, GDJ1 和 SDJ1 的维度
|
||
[dim1, dim2, dim3] = size(mDYJ1);
|
||
|
||
|
||
% 遍历所有元素并更新 beneits
|
||
for i = 1:dim1
|
||
for j = 1:dim2
|
||
for k = 1:dim3
|
||
if mDYJ1(i,j,k) <= GDYJ1(i,j,k)
|
||
% 如果 mDJ 小于或等于 GDJ
|
||
beneits = beneits + mDYJ1(i,j,k) * SDYJ1(i,j,k);
|
||
else
|
||
% 如果 mDJ 大于 GDJ
|
||
beneits = beneits + GDYJ1(i,j,k) * SDYJ1(i,j,k) ...
|
||
+ (mDYJ1(i,j,k) - GDYJ1(i,j,k)) * 0;
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
|
||
|
||
|
||
mDEJ1 = mDEJ(:,:,2:8);
|
||
SDEJ1 = repmat(SDEJ, [1, 1, 7]);
|
||
GDEJ1 = repmat(GDEJ, [1, 1, 7]);
|
||
|
||
% 获取 mDJ1, GDJ1 和 SDJ1 的维度
|
||
[dim1, dim2, dim3] = size(mDEJ1);
|
||
|
||
|
||
% 遍历所有元素并更新 beneits
|
||
for i = 1:dim1
|
||
for j = 1:dim2
|
||
for k = 1:dim3
|
||
if mDEJ1(i,j,k) <= GDEJ1(i,j,k)
|
||
% 如果 mDJ 小于或等于 GDJ
|
||
beneits = beneits + mDEJ1(i,j,k) * SDEJ1(i,j,k);
|
||
else
|
||
% 如果 mDJ 大于 GDJ
|
||
beneits = beneits + GDEJ1(i,j,k) * SDEJ1(i,j,k) ...
|
||
+ (mDEJ1(i,j,k) - GDEJ1(i,j,k)) * 0;
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
beneits
|