iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0

通過所有地點的路線

隨機行走的策略並不是效率良好的方法,
因此找出一個『從郵局出發且通過所有節點的路線』,機器人只要在這條路徑上來回兩次,必能完成所有遞送任務

const mailRoute = [
  "Alice's House", "Cabin", "Alice's House", "Bob's House",
  "Town Hall", "Daria's House", "Ernie's House",
  "Grete's House", "Shop", "Grete's House", "Farm",
  "Marketplace", "Post Office"
];

因為需要儲存『還沒經過的地點』並移除『已經經過的地點』
需要利用機器人的記憶儲存,於每次轉彎後刪除陣列中第一個元素

因此,使機器人移動的策略更新如下

function routeRobot(state , memory){
    // Not visit any place, for initialization
    if(memory.length === 0){
        memory = mailRoute;
    }
    // remove the location after visit
    return {direction: memory[0],memory: memory.slice(1) }
}

重新再啟動一次
另外宣告一個變數valueOfVillageStage 來裝隨機產生的state資料變數
確保兩個robot(randomRobot / routeRobot)都是傳入同組資料

另外啟動 routeRobot 要記得 declare empty array 給 memory

// declare variable for state
const valueOfVillageStage = VillageState.random();
// invoke robot with randomRobot strategy
runRobot(valueOfVillageStage , randomRobot);
// invoke robot with routeRobot strategy
runRobot(valueOfVillageStage, routeRobot, []);

會發現 routeRobot 的效率明顯比 randomRobot 好
整體次數少很多


上一篇
Chapter 7 實作專案-4(隨機移動策略)-day25
系列文
溫故而知新:Eloquent Javascript 閱讀筆記26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言