问题如下:
问题解决:脚本使用matlab实时脚本编写,一个main和三个function,最后的线性规划为一个示例demo。
主程序:
% Author:HXF
% Time:2022.4.23 10:35
参数声明
clear,clc;
% 能量法参数
struction.ki=[3000 3500 4000 4500 5000];% 第i项作业的比阻,N/m
struction.Ui=[20000 20000 20000 20000 20000];% 第i项作业的总面积,hm2
struction.Dti=[5 5 5 5 5];% 完成第i项作业可工作天数,d
struction.Tpi=[8 8 8 8 8];% 完成第i项作业平均每天工作小时数,h/d
struction.Qgi=[6000 6000 6000 6000 6000];% 每公顷谷稿总质量,kg/hm2
% 作业量法参数
struction.abi=[1 1 1 1 1];% 完成第i项作业期间机组平均每天工作班次数,班/d
struction.Wni=[50 50 50 50 50];%选定机组进行第i项作业时的班生产率,hm2/班
% 最小年度费用法参数
% struction处无
% 线性规划参数
struction.xi=[10 20 30 40 50];% 第 𝑖种型号的拖拉机台数
struction.Mi=[20 20 20 20 20];% 第 𝑖型拖拉机能提供进行某项作业或作业组合的最大班次数
struction.Ci=[1000 1000 1000 1000 1000];% 第 𝑖型拖拉机应分摊的年固定费,元/台
struction.xj=[20 10 33 24 55 66 75];% 第 𝑗种型号的作业机械台数
struction.Zj=[10 10 10 10 10 10 10];% 第 𝑗型作业机械能提供进行某项作业或作业组合的最大班次数
struction.Cj=[100 100 100 100 100 100 100];% 第 𝑗型作业机械应分摊的年固定费,元/台
struction.xk=[30 60 90 45 55 41 46 56 81 54];% 第 𝑘种机组的台班数
struction.Wsk=[50 50 50 50 50 50 50 50 50 50];% 作业机组的班生产率,hm2/班、t·km/班
struction.Ck=[200 200 200 200 200 200 200 200 200 200];% 第 𝑘种作业机组作业的可变费用,元/台·班
struction.Uk=[1000 1000 1000 1000 1000];% 第 𝐾项作业的规定作业量
struction.xt=length(struction.xi);% 𝑡为拖拉机型号总数
struction.xm=length(struction.xj);% m=𝑚 − 𝑡为作业机械型号总数
struction.xs=length(struction.xk);% s=s − 𝑚为作业机组总数
struction
% 能量法参数
const.U=3000;% 运输作物总面积,hm2
const.faiT=1.5;% —拖车质量系数(一般拖车自身质量约为载质量的1/2,故 𝜓T可取1.5)
const.f=0.3;% 滚动阻力系数
const.Sp=10;% 平均运输距离,km
const.NTN=3000;% 拖拉机型号的额定牵引功率 kw
const.rateTN=0.9;% 牵引功率利用率
% 作业量法参数
const.T=10;% 每天作业时间,h/d
const.vp=10;% 机组平均技术速度,km/h
const.b_mechine=5;% 单台机械幅宽,m
% 最小年度费用法参数
const.a=10000;
const.b=1000;
const.c=50;
const.r=1;% 分别为有关经济参数
const.NeN=150;% 拖拉机发动机的标定功率,kW
const.A=45000;% 利用功
const.t=10;% 拖拉机可以利用而未被利用的时间(h)
% 线性规划参数
const
%% 能量法
result_energy=energy(struction.ki,struction.Ui,struction.Qgi,const.U,const.faiT,const.f,const.Sp,struction.Dti,struction.Tpi,const.NTN,const.rateTN);
result_energy.nt=sum(result_energy.nZ);% 拖拉机总台数
result_energy
%% 作业量法
result_work = work(struction.Ui,struction.Dti,struction.abi,struction.Wni,const.T,const.vp,const.b_mechine);
result_work.nn=sum(result_work.nn1Z);
result_work
%% 最小年度费用法
%% 数学模型:Cn=a+b*NeN+c*T+r*NeN*T
result_best = best(const.a,const.b,const.c,const.r,const.NeN,const.A,const.t)
%% 线性规划
% 此代码用于展示求解器使用方法,和实际问题无关
f=[-1000; -100; -200];
a=[0,0,-1;0,1,0]; b=[-20;200];
aeq=[1,1,1]; beq=60;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
x, y=y %目标函数最小化
能量法的function:
function result = energy(ki,Ui,Qgi,U,faiT,f,Sp,Dti,Tpi,NTN,rateTN)
result.Nti=[];
result.Nt=[];
result.n=[];
result.nZ=[];
num=length(ki);
for i=1:num
result.Nti(i)=ki(i)*Ui(i)/(360*Dti(i)*Tpi(i));
result.Nt(i)=(Qgi(i)*U*faiT*f*Sp)/(1.36*270*Dti(i)*Tpi(i));
result.n(i)=result.Nti(i)/(NTN*rateTN);
result.nZ(i)=ceil(result.n(i));
end
作业量法的function:
function result = work(Ui,Dti,abi,Wni,T,vp,b)
result.nn1=[];
result.B=[];
result.nn2=[];
result.nn1Z=[];
result.nn2Z=[];
num=length(Ui);
for i=1:num
result.nn1(i)=Ui(i)/(Dti(i)*abi(i)*Wni(i));
result.nn1Z(i)=ceil(result.nn1(i));
result.B(i)=(10*Ui(i))/(Dti(i)*T*vp);
result.nn2(i)=result.B(i)/b;
result.nn2Z(i)=ceil(result.nn2(i));
end
最小年度费用法的function:
function result = best(a,b,c,r,NeN,A,t)
result.T=(A+t*NeN)/(NeN);
result.Cn=a+b*NeN+c*result.T+r*NeN*result.T;
result.Neo=sqrt((c*A)/(b+r*t))
主程序中数据来源于网络,具体计算时将数据改为实际值即可。
matlab mobile 运行结果
本文用于农业机械化管理课程的学习交流;
本文理论依据和附图资源来自教学资源演示文稿,作者尊重原著者的著作权,如侵即删。