@[TOC] 2020年全国数学建模大赛B题源代码以及模型的建立 (2)
思路:
**步骤1:**给出栅格地图的地形矩阵;初始化信息素矩阵 Tau(记录每个栅格至其他栅格的信息素量),最大迭代次数K,人员个数M,表征信息素重要程度的参数 、表征启发式信息重要程度的参数 ,信息素蒸发系数 ,信息素增加强度系数Q及启发式信息矩阵
**步骤2:**构建启发式信息矩阵。计算每个栅格至目标点的距离,启发式信息素取为至目标点距离的倒数,距离越短,启发式因子越大,障碍物处的启发式信息为0。建立矩阵D,用以存储每个栅格点至各自相邻无障碍栅格点的代价值。
**步骤3:**对于每一个人,初始化人行走的路径及路径长度,将禁忌列表全部初始化为1;人从起始点出发开始搜索路径,找出当前栅格点的所有无障碍相邻栅格点(即矩阵D中相应元素不为0的栅格点),再根据禁忌列表筛选出当前可选择的栅格点。
**步骤4:**如果起始点是目标点,且可选栅格点个数大于等于1,则根据式(3)计算人从当前栅格点转移到各相邻栅格点的概率,
并根据轮盘赌的方法选择下一个栅格点。
**步骤5:**更新人步行的路径、路径长度、矩阵D及禁忌列表。
**步骤6:**重复步骤4和5直到起始点为目标点或可选栅格点小于1,本次迭代中当前人寻路完毕,记录该人的行走路线。
**步骤7:**如果该人最后一步是目标点,则计算路径长度并与当前已知的最短路径长度作比较,若本次路径长度小于当前已知的最短路径长度,则更新当前最短路径长度及最短路径;如果该人最后一步不是目标的,则只将路径长度记为0。
**步骤8:**重复步骤3至步骤7直到M个人完成一轮路径搜索,按照式(4)更新信息素。
附带部分代码,有问题请联系博主。
下面展示一些 部分代码
。
% -------------------------------------------------------------------------
% 2020B-穿越沙漠
% 问题一:
% 假设只有一名玩家,在整个游戏时段内每天天气状况事先全部已知,
% 试给出一般情况下玩家的最优策略。求解附件中的“第一关”和“第二关”,
% 并将相应结果分别填入Result.xlsx
% -------------------------------------------------------------------------
%% 初始化参数
clear all;close all;clc;
maxWeight = 1200 ; %负重上限 1200千克
initialFunding = 10000; % 初始资金 10000元
deadline = 30 ; % 截止日期 第30天
baseIncome = 1000; % 基础收益 1000元
waterWeight = 3; % 水每箱质量
waterPrice = 5; % 水基准价格
waterWeather = [5,8,10];%基础消耗量(箱) 晴朗 高温 沙暴
foodWeight = 3; % 水每箱质量
foodPrice = 5; % 水基准价格
foodWeather = [5,8,10];% 基础消耗量(箱) 晴朗 高温 沙暴
mine = 12; % 矿山
village = 15; % 村庄
startPoint = 1; % 起点
endPoint = 27; % 终点
weather = ['高温 高温 晴朗 沙暴 晴朗 高温 沙暴 晴朗 高温 高温',...
'沙暴 高温 晴朗 高温 高温 高温 沙暴 沙暴 高温 高温',...
'晴朗 晴朗 高温 晴朗 沙暴 高温 晴朗 晴朗 高温 高温'];
% 晴朗 高温 沙暴 分别用1 2 3 代替
weather(strfind(weather,'晴')) = '1';
weather(strfind(weather,'朗')) = ' ';
weather(strfind(weather,'高')) = '2';
weather(strfind(weather,'温')) = ' ';
weather(strfind(weather,'沙')) = '3';
weather(strfind(weather,'暴')) = ' ';
weather = str2num(weather);
mapNum = 27; % 地图大小
map = zeros(mapNum);
map(1,[2,25]) = 1;
map(2,[1,3]) = 1;
map(3,[2,4]) = 1;
map(4,[3,24,5,25]) = 1;
map(5,[4,6,24]) = 1;
map(6,[5,7,22,23,24]) = 1;
map(7,[2,25]) = 1;
map(8,[7,9,22]) = 1;
map(9,[8,22,21,17,16,15,10]) = 1;
map(10,[9,15,13,11]) = 1;
map(11,[10,13,12]) = 1;
map(12,[11,13,14]) = 1;
map(13,[10,15,14,12,11]) = 1;
map(14,[12,13,15,16]) = 1;
map(15,[9,10,13,14,16]) = 1;
map(16,[9,15,14,17,18]) = 1;
map(17,[9,16,18,21]) = 1;
map(18,[17,16,19,20]) = 1;
map(19,[18,20]) = 1;
map(20,[21,18,19]) = 1;
map(21,[27,23,22,9,17,20]) = 1;
map(22,[23,7,8,9,21]) = 1;
map(23,[26,24,6,22,21]) = 1;
map(24,[26,25,4,5,6,23]) = 1;
map(25,[1,2,3,4,24,26]) = 1;
map(26,[25,24,23,27]) = 1;
map(27,[26,21]) = 1;
disp('初始化参数完毕...')
%% 情况一:规定时间内,最小成本达到目的地
%% 情况二:规定时间内,挖矿后,利益最大化到达目的地