هوش مصنوعی با برنامه نویسی پایتون – برنامه نویسی منطقی

3 سال پیش

هوش مصنوعی با برنامه نویسی پایتون – برنامه نویسی منطقی

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، ما به برنامه نویسی منطقی و چگونگی کمک به آن در هوش مصنوعی خواهیم پرداخت.

ما قبلاً می دانیم که منطق مطالعه اصول استدلال صحیح است یا به عبارتی ساده مطالعه آنچه پس از چه می آید. به عنوان مثال، اگر دو جمله درست باشد، می توانیم هر گزاره سوم را از آن استنباط کنیم.

مفهوم

Logic Programming ترکیبی از دو کلمه منطق و برنامه نویسی است. برنامه نویسی منطقی یک الگوی برنامه نویسی است که در آن مشکلات به صورت واقعیت ها و قواعد با بیانیه های برنامه اما در درون یک سیستم منطق رسمی بیان می شوند. درست مانند سایر پارادایم های برنامه نویسی مانند شی گرا، کاربردی، اعلانی و رویه ای و غیره، این نیز روش خاصی برای نزدیک شدن به برنامه نویسی است.

پیشنهاد ویژه : پکیج آموزش پایتون

چگونه مشکلات را با برنامه نویسی منطقی حل کنیم

برنامه نویسی منطقی از حقایق و قواعدی برای حل مسئله استفاده می کند. به همین دلیل است که آنها را عناصر سازنده برنامه نویسی منطقی می نامند. در برنامه نویسی منطقی برای هر برنامه باید هدفی مشخص شود. برای درک چگونگی حل یک مسئله در برنامه نویسی منطقی، باید در مورد بلوک های ساختمانی بدانیم –

حقایق

در واقع، هر برنامه منطقی برای کار با آنها نیاز به حقایقی دارد تا بتواند به هدف معین برسد. واقعیت ها اساساً گزاره های واقعی در مورد برنامه و داده ها هستند. به عنوان مثال، دهلی پایتخت هند است.

قوانین

در واقع، قوانین محدودیت هایی هستند که به ما امکان می دهند در مورد حوزه مشکل نتیجه بگیریم. قوانینی که اساساً به صورت بندهای منطقی برای بیان حقایق مختلف نوشته می شوند. به عنوان مثال، اگر ما در حال ساخت هر بازی هستیم، تمام قوانین باید مشخص شوند.

قوانین برای حل هر مشکلی در برنامه نویسی منطق بسیار مهم هستند. قوانین اساساً نتیجه منطقی است که می تواند واقعیت ها را بیان کند. در زیر نحو قانون آمده است.

A∶− B1 ، B2 ، … ، Bn.

در اینجا ، A سر است و B1 ، B2 ، … Bn بدنه است.

به عنوان مثال – جد (X ، Y): – پدر (X ، Y).

جد (X ، Z): – پدر (X ، Y) ، جد (Y ، Z).

این را می توان برای هر X و Y خواند ، اگر X پدر Y است و Y جد Z است، X جد Z است. برای هر X و Y ، X جد Z است، اگر X باشد پدر Y و Y از اجداد Z است.

نصب پکیج های مفید

برای شروع برنامه نویسی منطقی در پایتون، ما باید دو بسته زیر را نصب کنیم:

 

Kanren

این راهی برای ساده سازی روش ساختن کد برای منطق تجارت به ما ارائه می دهد. این به ما اجازه می دهد منطق را از نظر قوانین و واقعیت ها بیان کنیم. دستور زیر به شما در نصب kanren کمک می کند –

pip install kanren

SymPy

SymPy یک کتابخانه پایتون برای ریاضیات نمادین است. هدف آن تبدیل شدن به یک سیستم جبر رایانه ای کامل (CAS) در عین ساده نگه داشتن کد برای درک و فهم آسان و توسعه یافتن آن است. دستور زیر به شما در نصب SymPy کمک می کند –

pip install sympy

نمونه هایی از برنامه نویسی منطقی

موارد زیر چند نمونه است که با برنامه ریزی منطقی قابل حل است –

تطبیق عبارات ریاضی

در واقع ما می توانیم با استفاده از برنامه نویسی منطقی و به روشی بسیار موثر، مقادیر ناشناخته را پیدا کنیم. کد پایتون زیر به شما کمک می کند تا یک عبارت ریاضی را مطابقت دهید –

ابتدا وارد کردن پکیج های زیر را در نظر بگیرید:

from kanren import run, var, fact
from kanren.assoccomm import eq_assoccomm as eq
from kanren.assoccomm import commutative, associative

 

ما باید عملیات ریاضی را که می خواهیم استفاده کنیم تعریف کنیم –

add = 'add'
mul = 'mul'

 

جمع و ضرب هر دو فرایندهای ارتباطی هستند. از این رو، ما باید آن را مشخص کنیم و این را می توان به شرح زیر انجام داد

fact(commutative, mul)
fact(commutative, add)
fact(associative, mul)
fact(associative, add)

 

تعریف متغیرها اجباری است. این را می توان به شرح زیر انجام داد –

a ، b = var ('a') ، var ('b')

باید عبارت را با الگوی اصلی مطابقت دهیم. ما الگوی اصلی زیر را داریم که اساساً b*(a+5)

Original_pattern = (mul, (add, 5, a), b)

ما دو عبارت زیر را برای مطابقت با الگوی اصلی داریم –

exp1 = (mul, 2, (add, 3, 1))
exp2 = (add,5,(mul,8,1))

خروجی را می توان با دستور زیر چاپ کرد:

print(run(0, (a,b), eq(original_pattern, exp1)))
print(run(0, (a,b), eq(original_pattern, exp2)))

پس از اجرای این کد، خروجی زیر را خواهیم گرفت –

((۳,۲))
()

اولین خروجی مقادیر a و b را نشان می دهد. عبارت اول با الگوی اصلی مطابقت دارد و مقادیر a و b را برمی گرداند اما عبارت دوم با الگوی اصلی مطابقت ندارد بنابراین هیچ چیزی برگردانده نشده است.

بررسی شماره های اول

با کمک برنامه نویسی منطقی، می توانیم اعداد اول را از لیست اعداد پیدا کنیم و می توان اعداد اول را نیز تولید کرد. کد پایتون که در زیر آورده شده است، عدد اول را از لیست اعداد پیدا می کند و همچنین ۱۰ عدد اول را تولید می کند.

اجازه دهید ابتدا واردات بسته های زیر را بررسی کنیم –

from kanren import isvar, run, membero
from kanren.core import success, fail, goaleval, condeseq, eq, var
from sympy.ntheory.generate import prime, isprime
import itertools as it

 

حال، تابعی به نام prime_check را تعیین خواهیم کرد که اعداد اول را بر اساس اعداد داده شده به عنوان داده بررسی می کند.

def prime_check(x):
if isvar(x):
   return condeseq([(eq,x,p)] for p in map(prime, it.count(1)))
else:
   return success if isprime(x) else fail

خروجی کد فوق به شرح زیر خواهد بود –

{۱۹, ۲۳, ۲۹, ۴۱}
(۲, ۳, ۵, ۷, ۱۱, ۱۳, ۱۷, ۱۹, ۲۳, ۲۹)

 

حل معماها

از برنامه نویسی منطقی می توان برای حل بسیاری از مشکلات مانند  پازل سودوکو، پازل گورخر، ملکه  و غیره استفاده کرد. در اینجا ما یک نمونه از پازل گورخر را مثال می زنیم که به شرح زیر است –

There are five houses.
The English man lives in the red house.
The Swede has a dog.
The Dane drinks tea.
The green house is immediately to the left of the white house.
They drink coffee in the green house.
The man who smokes Pall Mall has birds.
In the yellow house they smoke Dunhill.
In the middle house they drink milk.
The Norwegian lives in the first house.
The man who smokes Blend lives in the house next to the house with cats.
In a house next to the house where they have a horse, they smoke Dunhill.
The man who smokes Blue Master drinks beer.
The German smokes Prince.
The Norwegian lives next to the blue house.
They drink water in a house next to the house where they smoke Blend.

 

ما در حال حل آن برای سوالی هستیم که چه کسی با کمک پایتون پازل گورخر را در اختیار دارد.

اجازه دهید پکیج های لازم را وارد کنیم –

from kanren import *
from kanren.core import lall
import time

 

اکنون، ما باید دو تابع را تعریف کنیم – () leftو ()next برای بررسی اینکه خانه چه کسی باقی مانده است یا کنار خانه چه کسی است

def left(q, p, list):
   return membero((q,p), zip(list, list[1:]))
def next(q, p, list):
   return conde([left(q, p, list)], [left(p, q, list)])

 

اکنون، ما یک خانه متغیر را به شرح زیر اعلام خواهیم کرد:

houses = var()

ما باید قوانین را با کمک پکیج lall به شرح زیر تعریف کنیم.

۵ خانه وجود دارد:

rules_zebraproblem = lall(
   (eq, (var(), var(), var(), var(), var()), houses),

   (membero,('Englishman', var(), var(), var(), 'red'), houses),
   (membero,('Swede', var(), var(), 'dog', var()), houses),
   (membero,('Dane', var(), 'tea', var(), var()), houses),
   (left,(var(), var(), var(), var(), 'green'),
   (var(), var(), var(), var(), 'white'), houses),
   (membero,(var(), var(), 'coffee', var(), 'green'), houses),
   (membero,(var(), 'Pall Mall', var(), 'birds', var()), houses),
   (membero,(var(), 'Dunhill', var(), var(), 'yellow'), houses),
   (eq,(var(), var(), (var(), var(), 'milk', var(), var()), var(), var()), houses),
   (eq,(('Norwegian', var(), var(), var(), var()), var(), var(), var(), var()), houses),
   (next,(var(), 'Blend', var(), var(), var()),
   (var(), var(), var(), 'cats', var()), houses),
   (next,(var(), 'Dunhill', var(), var(), var()),
   (var(), var(), var(), 'horse', var()), houses),
   (membero,(var(), 'Blue Master', 'beer', var(), var()), houses),
   (membero,('German', 'Prince', var(), var(), var()), houses),
   (next,('Norwegian', var(), var(), var(), var()),
   (var(), var(), var(), var(), 'blue'), houses),
   (next,(var(), 'Blend', var(), var(), var()),
   (var(), var(), 'water', var(), var()), houses),
   (membero,(var(), var(), var(), 'zebra', var()), houses)
)

 

اکنون، حل کننده را با محدودیت های قبلی اجرا کنید –

solutions = run(0, houses, rules_zebraproblem)

با کمک کد زیر می توانیم خروجی را از حل کننده استخراج کنیم –

output_zebra = [house for house in solutions[0] if 'zebra' in house][0][0]

کد زیر به چاپ راه حل کمک می کند –

print ('\n'+ output_zebra + 'owns zebra.')

خروجی کد فوق به شرح زیر است:

German owns zebra.

 

منبع.

لیست جلسات قبل آموزش هوش مصنوعی با برنامه نویسی پایتون

  1. آموزش هوش مصنوعی با برنامه نویسی پایتون – مفهوم کلی
  2. شروع آموزش هوش مصنوعی با برنامه نویسی پایتون
  3. یادگیری ماشین در هوش مصنوعی با برنامه نویسی پایتون
  4. هوش مصنوعی با برنامه نویسی پایتون، آماده ‌سازی داده ها
  5. هوش مصنوعی با پایتون، یادگیری نظارت شده و طبقه بندی
  6. هوش مصنوعی با برنامه نویسی پایتون – یادگیری تحت نظارت: رگرسیون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه