@[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('初始化引數完畢...')
%% 情況一:規定時間內,最小成本達到目的地
%% 情況二:規定時間內,挖礦后,利益最大化到達目的地
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/31893.html
標籤:其他
下一篇:Kali破解wifi
