iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
AI & Data

了解AI多一點點系列 第 21

【Day 21】傳教士與食人族 – 介面設計

  • 分享至 

  • xImage
  •  

在設計完函式以及結點架構過後,我們便要讓使用者們可以透過利用使用者介面,看見他們串連在一起後運作的結果了。雖然應該使用動畫界面能更好的呈現出結果,但由於我30天挑戰的目的為讓大家更了解人工智慧的相關事物,因此這裡便以簡易的文字介面做取代。

選擇演算法

首先希望使用者們可以以使用者介面選擇用A*演算法或是Dijkstra演算法去做搜尋,以及讓使用者能夠自行輸入傳教士的總數以及食人族的總數。版本用來控制heuristic function的計算方式,人數則影響路徑結果。

設計如下:

if __name__ == '__main__':
    print("(1) A* search")
    print("(2) Uniform cost search\n")
    while(True):
        state.version = input("Please enter the version number:")
        if state.version in ["1", "2"]:
            break
        else:
            print("Please enter one or two.\n")
    state.M = int(input("Please enter the amount of missionary:"))
    state.C = int(input("Please enter the amount of cannibal:"))

初始化

接著做初始化,建立open list以及closed list和用來記錄是否有結果的變數。然後創造初始狀態的結點(根據使用者輸入的傳教士人數以及食人族人數創造)以及終點的結點(所有人皆在左岸,最後兩個參數不重要因為若能夠使所有人到左岸則,船的位置必定合理)

open_list = []
closed_list = []
result = False

init = state.State(state.M, state.C, True, True)
goal = state.State(0, 0, False, False)  # the last two elements are not important

Github連結:https://github.com/Ming06-22/Missionaries-cannibals


上一篇
【Day 20】傳教士與食人族 – 展開結點
下一篇
【Day 22】傳教士與食人族 – 結果展示
系列文
了解AI多一點點30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言