for(var x=0;x<16;x++){ for(var y=0;y<16;y++){ if(x*2+y*2==16){ console.log(x,y) } }}我們需要把具體的解決方案也編寫完。是不是感覺邏輯編程很簡單?只需要把解題的約束建立好。學習邏輯編程,可以先從Prolog學起。
02Prolog 語言我們來試驗下邏輯編程,開發環境是mac,打開終端,輸入:注意,prolog的每條命令結尾需要添加一個 . 號終端會列印出Hello Mixlab的字樣,恭喜,prolog運行成功。03通過尋找兇手的例子,了解邏輯編程的核心思想如何用prolog尋找兇手呢?案件是這樣的Boddy先生死於謀殺,現有6名嫌疑犯,每個人在不同的房間,每間房間各有一件可能的兇器。我們不知道嫌疑犯、房間、兇器之間的對應關係。下面將根據每次探案獲得的線索,一步步輸入prolog,最終找出誰是兇手。這個過程是不是很像最近熱播的《輪到你了》中用AI來尋找兇手的過程,也是一次次輸入獲得的線索,然後AI來推理。三女 Barbara、Christine、Yolandaman(george).man(john).man(robert).woman(barbara).woman(christine).woman(yolanda).person(X):- man(X).person(X):- woman(X).這樣,最基本的變量(未知數)X和知識person、woman,已經建立關係。我們可以把上面這幾行代碼寫成一個test.pl文件,然後終端輸入:返回的是false,因為shadow沒有錄入man裡,再試試輸入:Logic Tensor Networks(LTN)LTN邏輯張量網絡,把知識和數據都被映射到向量空間,從而使得模型具備知識推理能力。下面通過一個例子來理解它的核心思想。通過上文的簡單介紹,我們知道,需要把知識跟變量可能的值錄入,程序就具備了邏輯推理能力。例如,知識「apple」,按照邏輯編程的寫法「 apple(x)」,它將任何對象x作為參數,如果該對象是蘋果則返回true,否則返回false。sweet(x):- apple(x),red(x)如果apple(x)返回的不是true或者false,而是返回0到1之間的數字,這樣,我們就可以通過0-1來表達x是apple的概率。一旦我們把apple(x)的取值範圍變為0-1,我們就可以利用神經網絡進行分類,然後再使用我們的邏輯公式對其進行推理。此外,我們可以使用邏輯公式來指導學習神經網絡權重的過程。我們可以優化神經網絡的權重,使其正確地將x分類為apple。我是喜歡上了邏輯編程的方式,還可以為AI加上推理能力,https://github.com/xmonader/prolog-rands/blob/master/crime.pl2 Logic Tensor Networks: Deep Learning and Logical Reasoning from Data and Knowledgehttps://arxiv.org/abs/1606.04422
贊後➕好友