在設計完函式以及結點架構過後,我們便要讓使用者們可以透過利用使用者介面,看見他們串連在一起後運作的結果了。雖然應該使用動畫界面能更好的呈現出結果,但由於我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