2020年全国数学建模大赛B题源代码以及模型的建立 (2)

@[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('初始化参数完毕...')

%% 情况一:规定时间内,最小成本达到目的地








%% 情况二:规定时间内,挖矿后,利益最大化到达目的地



猜你喜欢

转载自blog.csdn.net/k1803626086/article/details/108546751
今日推荐