成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

邏輯編程:上古人工智能語(yǔ)言Prolog

開(kāi)發(fā) 前端
邏輯編程語(yǔ)言歷史悠久,通常用于教育、研究和某些專(zhuān)業(yè)應(yīng)用領(lǐng)域,如人工智能、知識(shí)表示、自然語(yǔ)言處理、專(zhuān)家系統(tǒng)等,但是我們?nèi)粘S玫暮苌伲饕且驗(yàn)樗男阅懿惶茫覍W(xué)習(xí)曲線比較陡峭,業(yè)界的接受程度不太高。

今天給大家介紹一種有趣的編程語(yǔ)言。

它能夠讓計(jì)算機(jī)像偵探一樣推理,像哲學(xué)家一樣思考,這就是邏輯編程。

邏輯編程就好比我們給計(jì)算機(jī)一個(gè)邏輯謎題,然后他通過(guò)一系列的推理,找到答案。

1 邏輯編程是什么?

1.1 邏輯編程的定義與特點(diǎn)

想象一下,如果我們可以讓計(jì)算機(jī)像人類(lèi)一樣思考和解決問(wèn)題,那會(huì)是怎樣的情景?邏輯編程就是這樣一種嘗試,它利用邏輯學(xué)的原理,使計(jì)算機(jī)能夠進(jìn)行推理和解決問(wèn)題。

我們只需要告訴計(jì)算機(jī):“這是規(guī)則,這是事實(shí),現(xiàn)在你告訴我答案?!?就像玩一個(gè)連環(huán)推理的游戲,每個(gè)線索都逐漸揭開(kāi)謎題的一部分,最終揭示出整個(gè)故事。

邏輯編程的特點(diǎn)是高度抽象,不關(guān)注如何操作,而是關(guān)注“什么是真的”。

1.2 代表語(yǔ)言:Prolog

Prolog,即Programming in Logic,是邏輯編程的一種代表性語(yǔ)言。它的核心是事實(shí)和規(guī)則。讓我們來(lái)看一下Prolog的基本語(yǔ)法:

  • 事實(shí):在Prolog中,我們可以定義一些基本的事實(shí)。例如,philosopher(socrates). 表示“蘇格拉底是哲學(xué)家”。
  • 規(guī)則:規(guī)則用于定義事實(shí)之間的關(guān)系。例如,mortal(X) :- philosopher(X). 表示“如果某人是哲學(xué)家,那么他必然是凡人”。X表示參數(shù),大寫(xiě)的是變量,小寫(xiě)的是常量。符號(hào) :- 表示推理關(guān)系,如果右邊的表達(dá)式成立,左邊的表達(dá)式也成立。
  • 查詢(xún):查詢(xún)是向Prolog程序提出的問(wèn)題。例如,?- mortal(socrates). 將詢(xún)問(wèn)“蘇格拉底是凡人嗎?”。?-是命令提示符,我們?cè)诤筮呡斎胍獔?zhí)行的命令,回車(chē)后執(zhí)行并返回結(jié)果。

注意所有語(yǔ)句的最后都用一個(gè)點(diǎn)(.)表示結(jié)束。

Prolog的魅力在于它的簡(jiǎn)潔和強(qiáng)大。我們不需要告訴計(jì)算機(jī)如何一步步解決問(wèn)題,只需告訴它規(guī)則和事實(shí),它就能自動(dòng)進(jìn)行邏輯推理,最終給我們答案。

2 邏輯編程的應(yīng)用領(lǐng)域

2.1 專(zhuān)家系統(tǒng)

專(zhuān)家系統(tǒng)是邏輯編程的一大應(yīng)用,就像是擁有了一個(gè)專(zhuān)家顧問(wèn)團(tuán)隊(duì)。它們可以幫助醫(yī)生診斷疾病,或者幫助工程師設(shè)計(jì)復(fù)雜的機(jī)械結(jié)構(gòu)。以醫(yī)療診斷為例,在Prolog中,我們可以定義一系列的癥狀和疾病之間的關(guān)系。例如:

disease(flu) :- symptom(fever), symptom(cough).

這條規(guī)則告訴計(jì)算機(jī):“如果一個(gè)人有發(fā)燒和咳嗽的癥狀,那么他可能得了流感?!蓖ㄟ^(guò)這樣的規(guī)則,專(zhuān)家系統(tǒng)可以幫助醫(yī)生診斷疾病。

2.2 自然語(yǔ)言理解

自然語(yǔ)言理解讓計(jì)算機(jī)能夠理解人類(lèi)的語(yǔ)言。就像是給計(jì)算機(jī)裝上了一副懂得人類(lèi)語(yǔ)言的眼鏡,它可以讀懂你的郵件,理解你的指令。例如,我們可以用Prolog來(lái)解析句子的結(jié)構(gòu):

sentence(Subject, Verb, Object) :- noun(Subject), verb(Verb), noun(Object).

這條規(guī)則可以幫助計(jì)算機(jī)理解“主語(yǔ) + 謂語(yǔ) + 賓語(yǔ)”的句子結(jié)構(gòu)。通過(guò)這種方式,計(jì)算機(jī)可以更好地理解用戶的輸入。

2.3 智能知識(shí)庫(kù)

智能知識(shí)庫(kù)就像是一個(gè)巨大的電子大腦,存儲(chǔ)著海量的信息。邏輯編程讓這個(gè)大腦可以自己思考和推理,幫助我們從中找到需要的知識(shí)。例如,一個(gè)關(guān)于歷史人物的知識(shí)庫(kù)可能包含如下規(guī)則:

born_in(bruce_lee, san_francisco).
performed(bruce_lee, the_game_of_death).

通過(guò)這樣的事實(shí)和規(guī)則,用戶可以查詢(xún)李小龍的出生地和參演過(guò)哪些電影。

3 邏輯編程如何解決問(wèn)題?

3.1 建立模型

解決問(wèn)題的第一步是建立一個(gè)模型。就像是搭建一座橋梁,我們需要定義橋梁的結(jié)構(gòu)和支撐點(diǎn)。在邏輯編程中,我們定義規(guī)則或限制條件,比如:“哲學(xué)家是凡人?!?/p>

mortal(X) :- philosopher(X).

3.2 定義規(guī)則與事實(shí)

接下來(lái),我們?cè)谀P蜕咸砑右?guī)則和事實(shí)。如果說(shuō)模型是橋梁的結(jié)構(gòu),那么規(guī)則和事實(shí)就像是橋梁上行駛的車(chē)輛。例如,我們聲明:“蘇格拉底、柏拉圖、亞里士多德是哲學(xué)家。”

philosopher(socrates).
philosopher(plato).
philosopher(aristotle).

3.3 推導(dǎo)與求解

最后,我們提出問(wèn)題,比如:“誰(shuí)是凡人?”邏輯編程像是一個(gè)聰明的小偵探,它會(huì)自動(dòng)推導(dǎo)邏輯,找出所有可能的答案,比如輸出:“蘇格拉底、柏拉圖、亞里士多德?!?/p>

Prolog 有很多實(shí)現(xiàn),本文以目前比較活躍的 SWI-Prolog 為例運(yùn)行這個(gè)程序。

需要先把規(guī)則和事實(shí)保存到一個(gè)文件中 mortal.pl,然后使用命令 consult 加載規(guī)則,最后執(zhí)行 mortal(X). 獲取結(jié)果,有多個(gè)答案時(shí),我們輸入分號(hào)(;),Prolog會(huì)繼續(xù)搜索直到所有可能的答案都被找到。

圖片圖片

SWI-Prolog官方網(wǎng)站:https://www.swi-prolog.org/

可執(zhí)行程序:https://www.swi-prolog.org/download/stable

Docker鏡像:https://hub.docker.com/_/swipl/

源碼:https://github.com/SWI-Prolog/swipl-devel

4 邏輯編程的常見(jiàn)問(wèn)題與解決方法

4.1 地圖著色問(wèn)題

想象一下你有一張地圖,你需要用不同的顏色給每個(gè)區(qū)域上色,但相鄰區(qū)域不能是同一種顏色。

(圖片和解題方法來(lái)源:https://ruanyifeng.com/blog/2019/01/prolog.html)

圖片圖片

規(guī)則如下:

color(red).
color(green).
color(blue).

color_solution(A,B,C,D,E) :-
    color(A), color(B), color(C), color(D), color(E),
    \+ A=B, \+ A=C, \+ A=D, \+ A=E,
    \+ B=C, \+ C=D, \+ D=E.

如果右邊有多個(gè)條件,用逗號(hào)隔開(kāi);如果要用否定表達(dá)式,在表達(dá)式前加上 \+ 。

計(jì)算速度還是比較快的,執(zhí)行效果如下:

圖片圖片

4.2 嫌疑人推理問(wèn)題

當(dāng)一個(gè)偵探在解決一個(gè)案件時(shí),他需要考慮所有嫌疑人的動(dòng)機(jī)和證據(jù)。邏輯編程可以幫助偵探整理這些信息,推斷出真正的罪犯。

假設(shè)規(guī)則如下:

% 犯罪嫌疑人
suspect(zhangsan).
suspect(lisi).
suspect(wangwu).

% 犯罪發(fā)生在夜晚
crime_occurred(night).

% 無(wú)辜的
innocent(Person) :- suspect(Person), not_at_scene(Person, Time), crime_occurred(Time).

% 假設(shè)我們知道Alice和Charlie在犯罪發(fā)生時(shí)有不在場(chǎng)證明
not_at_scene(zhangsan, night).
not_at_scene(lisi, night).

我們按照規(guī)則和事實(shí)就可以求解誰(shuí)是無(wú)辜的,誰(shuí)不能排除嫌疑,演示效果如下:

圖片圖片

4.3 尋找近似最優(yōu)解

有時(shí)候,問(wèn)題可能沒(méi)有一個(gè)完美的解決方案,求解最優(yōu)解的成本很高,我們找一個(gè)近似解就可以了。這里以背包問(wèn)題(Knapsack Problem)舉個(gè)例子,在這個(gè)問(wèn)題中,我們需要在不超過(guò)背包重量限制的情況下,盡可能多地裝入價(jià)值總和最大的物品。

假設(shè)我們有一系列物品,每個(gè)物品有重量和價(jià)值,以及一個(gè)背包的最大重量限制。這段代碼比較復(fù)雜,也有更好的解決方案,有興趣的可以研究下。

% 物品列表:item(物品ID, 價(jià)值, 重量).
item(1, 15, 20).
item(2, 20, 30).
item(3, 15, 25).
item(4, 22, 25).

% 背包最大重量限制
max_weight(50).

% 檢查物品組合是否超過(guò)最大重量
within_weight_limit(Items, MaxWeight) :-
    total_weight(Items, TotalWeight), %通過(guò)調(diào)用total_weight計(jì)算物品重量
    TotalWeight =< MaxWeight.

% 計(jì)算物品組合的總重量,這里是一個(gè)遞歸規(guī)則。
% 它分兩種情況:一個(gè)是空列表的總重量為0,另一個(gè)是包含至少一個(gè)物品的列表。
% 對(duì)于非空列表,它計(jì)算列表頭部物品的重量,然后遞歸地計(jì)算列表剩余部分的總重量,最后將兩者相加。
total_weight([], 0).
total_weight([Item|Rest], TotalWeight) :-
    item(Item, _, ItemWeight),
    total_weight(Rest, RestWeight),
    TotalWeight is ItemWeight + RestWeight.

% 計(jì)算物品組合的總價(jià)值,這也是一個(gè)遞歸規(guī)則
total_value([], 0).
total_value([Item|Rest], TotalValue) :-
    item(Item, ItemValue, _),
    total_value(Rest, RestValue),
    TotalValue is ItemValue + RestValue.

% 暴力搜索所有的組合,可以看作是一種深度優(yōu)先搜索
% max_weight把背包的最大容量取出來(lái)
% findall是Prolog內(nèi)置的,把所有物品的Id取出來(lái)
% subset把所有物品的組合取出來(lái),定義見(jiàn)下方,結(jié)果將被綁定到變量Solution
% within_weight_limit 判斷方案是否在重量限制中
% 如果Solution的總重量在限制范圍內(nèi),這個(gè)調(diào)用會(huì)計(jì)算其總價(jià)值并將其綁定到變量Value。
iterative_deepening_knapsack(Solution, Value) :-
    max_weight(MaxWeight),
    findall(Item, item(Item, _, _), AllItems),
    subset(AllItems, Solution),
    within_weight_limit(Solution, MaxWeight),
    total_value(Solution, Value).

% 用于查找所有可能組合(子集),這也是一個(gè)遞歸定義
% 空列表是其自身的子集。
% 如果列表的頭部是E,并且Tail的一個(gè)子集是NTail,那么添加E到NTail的頭部形成的列表也是原始列表的一個(gè)子集。這條規(guī)則包含列表中的第一個(gè)元素。
% 無(wú)論列表的頭部是什么(這里用匿名變量_表示),Tail的一個(gè)子集NTail也是原始列表的一個(gè)子集。這條規(guī)則不包含列表中的第一個(gè)元素。
subset([], []). 
subset([E|Tail], [E|NTail]):- subset(Tail, NTail).
subset([_|Tail], NTail):- subset(Tail, NTail).

% 尋找近似最優(yōu)解
% 使用findall運(yùn)行iterative_deepening_knapsack 來(lái)收集所有解決方案的價(jià)值
% 使用max_list找到最高的價(jià)值
% 再次運(yùn)行iterative_deepening_knapsack來(lái)找到與最高價(jià)值對(duì)應(yīng)的物品組合
% 返回最高價(jià)值A(chǔ)pproxValue和對(duì)應(yīng)的物品組合ApproxItems作為查詢(xún)結(jié)。
approximate_solution(ApproxValue, ApproxItems) :-
    findall(Value, iterative_deepening_knapsack(_, Value), Values),
    max_list(Values, ApproxValue),
    iterative_deepening_knapsack(ApproxItems, ApproxValue).

實(shí)際運(yùn)行效果如下:

圖片圖片

結(jié)語(yǔ)

邏輯編程語(yǔ)言歷史悠久,通常用于教育、研究和某些專(zhuān)業(yè)應(yīng)用領(lǐng)域,如人工智能、知識(shí)表示、自然語(yǔ)言處理、專(zhuān)家系統(tǒng)等,但是我們?nèi)粘S玫暮苌?,主要是因?yàn)樗男阅懿惶?,而且學(xué)習(xí)曲線比較陡峭,業(yè)界的接受程度不太高。

不過(guò)在人工智能中,其表示知識(shí)和推理方面的能力還是不錯(cuò)的,未來(lái)或許可以和命令式、函數(shù)式編程范式更多的結(jié)合,從而提供更加強(qiáng)大和靈活的編程工具。

最后,邏輯編程就像是賦予了計(jì)算機(jī)一種思考能力,有興趣的可以一起學(xué)習(xí)下。

責(zé)任編輯:武曉燕 來(lái)源: 螢火架構(gòu)
相關(guān)推薦

2021-11-23 17:57:50

編程語(yǔ)言Java python

2021-11-25 08:00:00

人工智能編程語(yǔ)言開(kāi)發(fā)

2019-10-25 15:58:10

人工智能機(jī)器學(xué)習(xí)技術(shù)

2019-05-16 14:15:33

人工智能Java編程語(yǔ)言

2011-01-28 15:54:40

人機(jī)大戰(zhàn)沃森

2023-07-11 10:57:08

人工智能AI

2017-03-16 11:35:17

人工智能PythonLISP

2022-07-31 23:46:57

人工智能語(yǔ)言模型感知力

2022-06-20 11:05:58

通用人工智能機(jī)器人

2022-10-19 07:04:12

?人工智能云服務(wù)Alaas

2022-01-19 00:08:26

人工智能AlphaGO計(jì)算機(jī)

2018-03-28 09:40:00

CITE人工智能館

2015-10-10 09:34:52

人工智能機(jī)器學(xué)習(xí)

2023-10-17 10:20:23

2017-04-11 11:49:00

人工智能

2017-04-07 11:30:04

人工智能開(kāi)發(fā)編程語(yǔ)言

2018-03-23 09:14:46

人工智能云計(jì)算機(jī)器學(xué)習(xí)

2022-11-14 15:06:16

2022-07-26 11:27:40

人工智能AIOps

2023-05-05 14:02:59

人工智能聊天機(jī)器人
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91亚洲精品久久久电影 | 亚洲一区中文字幕 | 欧产日产国产精品国产 | 一区二区在线 | 人成精品 | 国产成人99久久亚洲综合精品 | 麻豆亚洲 | 精品国产18久久久久久二百 | 天天躁日日躁狠狠的躁天龙影院 | 91久色| 欧美日韩在线视频一区二区 | 中文字幕日韩欧美一区二区三区 | 国产精品99精品久久免费 | 黄色欧美在线 | 久久精品亚洲欧美日韩精品中文字幕 | 国产精品精品视频一区二区三区 | 日本手机看片 | 久草网免费 | 日韩一区二区在线视频 | 国产黄色麻豆视频 | 一区二区在线免费播放 | 国内精品久久久久 | 丝袜 亚洲 欧美 日韩 综合 | 欧美999| 免费在线视频a | 一区二区三区视频在线观看 | 午夜电影一区二区 | 欧美极品在线观看 | 亚洲一区二区三区视频在线 | 久久久青草婷婷精品综合日韩 | 国产精品久久久久久久久久久久久久 | 国产精品久久久久久久午夜片 | 视频一区中文字幕 | 日本久草视频 | 九九色综合| 久草热线| 黄色网址在线播放 | 久久成人精品 | 青青久久| 亚洲精品性视频 | 亚洲精品亚洲人成人网 |