2021年数学建模国赛C题(供货转运方案)助攻论文&支撑材料.doc

本博客下载链接包含修改的word版本, 可免费下载阅览学习, 也可作为数学建模相关课程作业修改上交:

链接:https://pan.baidu.com/s/1HxzDk3q0p6y2xpuJyxPgvw?pwd=qtnc

提取码:qtnc

       本文针对原材料供应过程中的最优成本规划问题,研究并设计开发了一个基于遗传算法的供货链规划系统。在分析实际供应链规划需求的基础上,构建了最优化定购方案和最优化运输方案的数学模型,提出了基于遗传算法(或粒子群算法)的最优供应规划模型。

       第一问需要利用过去240周的订货量数据与供货量数据对供应商进行评价, 我们构建了供货完成率,供货误差率,波动可接受性以及大额订单比例等指标, 利用公式法, 对供应商保障企业生产的重要性进行了评价, 并筛选了前50家企业.

       第二问先以供应商是否选择作为决策变量, 以供应商数量最少作为目标函数使用0-1规划模型, 得到最少需要127家供应商进行供货, 接着以127家供货商每周的供货量作为决策变量, 以最经济原材料价格作为目标函数, 建立数学规划模型, 得到最优的订货方案. 最后以127家供应商与8家转运商的选择作为决策变量, 以最低损耗率作为目标函数建立0-1规划模型, 得到最优的转运方案.

      第三问订货过程中, 对原材料A与C进行赋权, 使得A的权重为100,C的权重为1, 赋权后的总和最低作为目标函数, 建立规划模型, 转运过程中, 利用供货数据, 以转运损耗率最低作为目标函数,建立0-1规划模型.

      第四问由于企业的产能可以无限提升, 所以所有周, 所有供货商全部按照最大供应量进行供应, 此时只需要选择最合适的转运过程即可.

       本文写作过程中使用遗传算法(模拟退火)算法对规划模型进行了改进, 大大加快了运算速度, 并且不会落到局部最优解.有良好的适用性.

关键词: 规划模型(优化模型)   遗传算法   供应链

相关部分代码示例:

Main1:

%% 清空环境
clear all;
clc;
%% 设置种群参数
%   需要自行配置

options = gaoptimset('Generations', 1000,...     %设置迭代次数
                     'PopulationSize', 200);     %设置种群
%调用遗传算法
[x1,fval] = ga(@fitness1,402*24,[],[],[],[],zeros(402*24,1),ones(402*24,1),@nonlcon1,options);

%% 结果后处理
S = reshape(x1,24,402);
% 此时S即为所求的变量结果,为24*402的矩阵
% 其中前146列对应A,最后122列对应C,中间列对应B

% 将运行结果保存成excel
xlswrite('供应商的最少数量时对应的决策矩阵.xlsx',S);

nonlcon1.m

function  [ceq,c]=nonlcon1(x)
% 此时输入的是行向量
% 对变量取整,保证取值都是0或1
x = round(x);
x =x';

%导入maxA,maxB,maxC的数据
maxA = xlsread('maxA');
maxB = xlsread('maxB');
maxC = xlsread('maxC');

% 对输入变量进行重新排列
S = reshape(x,24,402);

% 分别赋值Sa,Sb,Sc
SA = S(:,1:146);
SB = S(:,147:280);
SC = S(:,281:402);

% 设定阈值(约束)
s = (-2.28e4)*ones(24,1)+(-2.28e4)*eye(24,1);

% 给输出赋值
ceq(:,1) = s-diag(0.98*(SA*maxA/0.6+SB*maxB/0.66+SC*maxC/0.72));
c =0;
end

fitness1.m 

function z = fitness1(x)
% 此时输入的是行向量
% 对变量取整,保证取值都是0或1
x = round(x);

% 将输入值转置成列向量
x = x';

% 对输入变量进行重新排列
S = reshape(x,24,402);

% 分别赋值Sa,Sb,Sc
SA = S(:,1:146);
SB = S(:,147:280);
SC = S(:,281:402);

% 定义计数并初始化
countA = 0;
countB = 0;
countC = 0;

% 分别对Sa,Sb,Sc各列求和并计数
for i=1:146
  if sum(SA(:,i)) > 0
      countA = countA + 1;
  end
end
for i=1:134
  if sum(SB(:,i)) > 0
      countB = countB + 1;
  end
end
for i=1:122
  if sum(SC(:,i)) > 0
      countC = countC + 1;
  end
end

% 汇总得到适应度函数
z = countA + countB + countC;
end




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值