الذكاء الاصطناعي1 - الوحدة الثانية [70-130].pdf

Full Transcript

‫‪ .2‬خوارزميات ال��ذكاء اال�صطناعي‬ ‫�س ��يتعرف الطال ��ب يف ه ��ذه الوح ��دة عل ��ى بع� ��ض اخلوارزمي ��ات األأ�سا�س ��ية املُ�س ��تخدَ مة يف‬ ‫ال��ذكاء اال�صطناع��ي (‪ .)AI‬كم��ا �س��يتعلم كي��ف ُينْ�شِ ��ئ نظ��ام ت�ش��خي�ص طبي ب�س��يط مُ�س��ت ِند‬ ‫�إىل القواع��د بِطُ ��رق برجمي��ة مُتع��ددة ث��...

‫‪ .2‬خوارزميات ال��ذكاء اال�صطناعي‬ ‫�س ��يتعرف الطال ��ب يف ه ��ذه الوح ��دة عل ��ى بع� ��ض اخلوارزمي ��ات األأ�سا�س ��ية املُ�س ��تخدَ مة يف‬ ‫ال��ذكاء اال�صطناع��ي (‪ .)AI‬كم��ا �س��يتعلم كي��ف ُينْ�شِ ��ئ نظ��ام ت�ش��خي�ص طبي ب�س��يط مُ�س��ت ِند‬ ‫�إىل القواع��د بِطُ ��رق برجمي��ة مُتع��ددة ث��م يق��ارن النتائ��ج‪ .‬ويف اخلتام �س��يتعلّم خوارزميات‬ ‫البحث وطرق حل �ألغاز املتاهة مع �أخذ معايري معيّنة يف االعتبار‪.‬‬ ‫�أهداف التعلُّم‬ ‫بنهاية هذه الوحدة �سيكون الطالب قادرًا على �أن‪:‬‬ ‫>يُن�شئ مقطعًا برجميًّا تكراريًّا‪.‬‬ ‫>يُق��ارِن ب�ني�ن خوارزمي��ة البح��ث ب�أولوية االت�س��اع وخوارزمية البح��ث ب�أولوية‬ ‫العُمق‪.‬‬ ‫>ي َِ�صف خوارزميات البحث وتطبيقاتها‪.‬‬ ‫>يُقارِن بني خوارزميات البحث‪.‬‬ ‫>ي َِ�صف النظام القائم على القواعد‪.‬‬ ‫>يُدرِّب مناذج الذكاء اال�صطناعي حتى تتعلّم حل امل�شكالت املُعقدة‪.‬‬ ‫>يُقيِّم نتائج املقطع الربجمي وكفاءة الربنامج الذي �أن�ش�أه‪.‬‬ ‫>يُطوِّر الربامج ملحاكاة حلّ م�شكالت احلياة الواقعية‪.‬‬ ‫>يُقارِن بني خوارزميات البحث‪.‬‬ ‫األأدوات‬ ‫>مفكرة جوبيرت (‪)Jupyter Notebook‬‬ ‫‪70‬‬ ‫الدر�س األأول‬ ‫اال�ستدعاء الذاتي‬ ‫تق�سيم املُ�شكلة ‪Dividing the Problem‬‬ ‫يف هذا الدر�س‪� ،‬ستتعلّم ا�ستخدام الدوال التكرارية لتب�سيط الربنامج وزيادة كفاءته‪.‬‬ ‫لك هديّة‪ ،‬وكنت ُمتلهفًا ملعرفتها‪ ،‬ولكن عندما فتحت ال�صندوق‪ ،‬وجدت �صندوقًا جديدً ا بداخله‪ ،‬وعندما‬ ‫والداك قد �أح�ضرا َ‬ ‫َ‬ ‫تخيّل �أن‬ ‫وجدت �آخ َر بداخله‪ ،‬وهكذا حتى عجزت �أن تعرف يف �أي �صندوق توجد الهدية‪.‬‬ ‫فتحته‪،‬‬ ‫َ‬ ‫اال�ستدعاء الذاتي ‪Recursion‬‬ ‫اال�س��تدعاء الذاتي هو �أحد طُ ُرق حل امل�ش��كالت يف علوم احلا�س��ب‪ ،‬ويتم عن طريق تق�س��يم امل�ش��كلة �إىل جمموعة من امل�ش��كالت‬ ‫�تخدم اال�س��تدعاء‬ ‫ال�صغ�ريرة املُ�ش��ابهة للم�ش��كلة األأ�صلي��ة حت��ى ُمُيكن��ك ا�س��تخدام اخلوارزمي��ة نف�س��ها حل��ل تل��ك امل�ش��كالت‪ُ .‬ي�س� َ‬ ‫الذاتي بوا�سطة �أنظمة الت�شغيل والتطبيقات األأخرى‪ ،‬كما تدعمه معظم لغات الربجمة‪.‬‬ ‫يحدث اال�ستدعاء الذاتي عندما‬ ‫تتكرر التعليمات نف�سها‪ ،‬ولكن‬ ‫مع بيانات خمتلفة و�أقل تعقيدًا‪.‬‬ ‫افتح ال�صندوق‬ ‫نعم‬ ‫هل هناك �صندوق‬ ‫بالداخل؟‬ ‫ال‬ ‫وجدت الهدية وانتهى‬ ‫اال�ستدعاء الذاتي‬ ‫�شكل ‪ :2.1‬مثال على اال�ستدعاء الذاتي‬ ‫‪71‬‬ .‫ل ُتُلقِ نظرة على مثال لدالة ت�ستدعي دالة �أخرى‬ def mySumGrade (gradesList): sumGrade=0 l=len(gradesList) for i in range(l): sumGrade=sumGrade+gradesList[i] return sumGrade def avgFunc (gradesList): s=mySumGrade(gradesList) l=len(gradesList) avg=s/l return avg ‫ا�ستدعاء الدالة‬ .mySumGrade ‫ قائمة‬len() ‫ت�ستخدم دالة‬ ِ ‫كم‬ ‫ حل�ساب وحتديد‬،‫ُعامل مُدخَ ل‬ .‫عدد العنا�صر يف القائمة‬ # program section grades=[89,88,98,95] averageGrade=avgFunc(grades) print ("The average grade is: ",averageGrade) The average grade is: 92.5 Recursive Function ‫دالة اال�ستدعاء التكرارية‬ ‫يف بع���ض احل��االت ت�س��تدعي الدّال� ُة نف�سَ ��ها وه��ذه اخلا�صي��ة تُ�س��مى‬ .)Recursive Calls( ‫اال�ستدعاءات التكرارية‬ ‫يك��ون ِبن��اء اجلمل��ة الع��ام لدال��ة اال�س��تدعاء التكراري��ة عل��ى النح��و‬ :‫التايل‬ ‫الربنامج الرئي�س‬ # recursive function recurseFunction() ‫خاطئ‬ ‫ال�شرط‬ def recurseFunction(): if (condition): # base case statement else: #recursive call recurseFunction() # main program ....... ‫�صحيح‬ # normal function call recurseFunction() ......... ‫األأمر‬ ‫ متثيل اال�ستدعاء التكراري‬:2.2 ‫�شكل‬ ‫اال�ستدعاء التكراري هو عملية‬ .‫ا�ستدعاء الدالة لنف�سها‬ 72 ‫تتكون دالة اال�ستدعاء التكرارية من حالتني‪:‬‬ ‫احلالة األأ�سا�سية ‪Base Case‬‬ ‫ويف ه��ذه احلال��ة تتوق��ف الدال��ة ع��ن ا�س��تدعاء نف�س��ها‪ ،‬ويت�أ ّك��د الو�صول �إىل ه��ذه احلالة من خالل األأمر امل�ش��روط‪ .‬بدون‬ ‫احلالة األأ�سا�سية‪� ،‬س َتتَكرَّر عملية اال�ستدعاء الذاتي �إىل ما ال نهاية‪.‬‬ ‫حالة اال�ستدعاء التكرارية ‪Recursive Case‬‬ ‫ويف ه��ذه احلال��ة ت�س��تدعي الدال� ُة نف�سَ ��ها عندم��ا ال ُحُتق��ق �ش��رط التوق��ف‪ ،‬وتظ��ل الدال��ة يف حالة اال�س��تدعاء الذاتي حتى‬ ‫ت�صل �إىل احلالة األأ�سا�سية‪.‬‬ ‫�أمثلة �شائعة على اال�ستدعاء الذاتي ‪Recursion Common Examples‬‬ ‫�أح��د األأمثل��ة األأك�رثر �ش��يوعً ا عل��ى ا�س��تخدام اال�س��تدعاء الذات��ي ه��و عملي��ة ح�س��اب م�ضروب رقم ُمع� ّنّين‪ .‬م�ض��روب الرقم هو‬ ‫عرَّب ع��ن امل�ضروب بالرق��م متبو ًع��ا بالعالمة "!"‪،‬‬ ‫ن��اجت �ض��رب جمي��ع األأع��داد الطبيعي��ة األأق��ل م��ن �أو ت�س��اوي ذل��ك الرق��م‪ُ .‬ي َّ‬ ‫على �سبيل املثال‪ ،‬م�ضروب الرقم ‪ 5‬هو !‪ 5‬وي�ساوي ‪.1*2*3*4*5‬‬ ‫جدول‬ ‫‪ :2.1‬م�ضروب األأرقام من ‪� 0‬إىل ‪5‬‬ ‫!‪0!=1 0‬‬ ‫!‪1!=1*1=1 1‬‬ ‫!‪2!=2*1=2 2‬‬ ‫!‪3!=3*2*1=6 3‬‬ ‫!‪4!=4*3*2*1=24 4‬‬ ‫!‪5!=5*4*3*2*1=120 5‬‬ ‫�أو‬ ‫�أو‬ ‫�أو‬ ‫�أو‬ ‫�أو‬ ‫�س��تالحظ �أن عملي��ة ح�س��اب امل�ض��روب ت�س��تند �إىل‬ ‫القاعدة �أدناه‪:‬‬ ‫‪1!= 0! *1‬‬ ‫‪2!= 1! *2‬‬ ‫الحالة‬ ‫األأ�سا�سية‬ ‫‪4!=3! * 4‬‬ ‫حالة اال�ستدعاء‬ ‫التكرارية‬ ‫‪3!= 2! *3‬‬ ‫‪5!=4! * 5‬‬ ‫‪,if n=0‬‬ ‫‪if n>0‬‬ ‫‪1‬‬ ‫‪(n-1)! * n‬‬ ‫= !‪n‬‬ ‫�شكل ‪ :2.3‬قاعدة ح�ساب امل�ضروب‬ ‫إلإن�شاء برنامج يقوم باحت�ساب م�ضروب العدد با�ستخدام حلقة التكرار‪ ،for‬اتّبع ما يلي‪:‬‬ ‫‪# calculate the factorial of an integer using iteration‬‬ ‫‪def factorialLoop(n):‬‬ ‫‪result = 1‬‬ ‫‪for i in range(2,n+1):‬‬ ‫‪result = result * i‬‬ ‫‪return result‬‬ ‫‪# main program‬‬ ‫))" ‪num = int(input("Type a number:‬‬ ‫)‪f=factorialLoop(num‬‬ ‫)‪print("The factorial of ", num, " is:", f‬‬ ‫‪Type a number: 3‬‬ ‫‪The factorial of 3 is:6‬‬ ‫‪73‬‬ ‫اآلآن ِ‬ ‫اح�سب م�ضروب العدد با�ستخدام دالة امل�ضروب‪.‬‬ ‫م�ضروب (‪)3‬‬ ‫‪# calculate the factorial of an integer using a‬‬ ‫‪# recursive function‬‬ ‫حالة اال�ستدعاء‬ ‫التكرارية‪.‬‬ ‫‪def factorial(x):‬‬ ‫الحالة األأ�سا�سية‪.‬‬ ‫‪if x == 0:‬‬ ‫‪return 1‬‬ ‫‪else:‬‬ ‫))‪return (x * factorial(x-1‬‬ ‫‪# main program‬‬ ‫))" ‪num = int(input("Type a number:‬‬ ‫)‪f=factorial(num‬‬ ‫)‪print("The factorial of ", num, " is: ", f‬‬ ‫‪Type a number: 3‬‬ ‫‪The factorial of 3 is: 6‬‬ ‫•تقل��ل دوال اال�س��تدعاء التكراري��ة م��ن ع��دد التعليم��ات يف‬ ‫املقطع الربجمي‪.‬‬ ‫•ميك��ن تق�س��يم املهم��ة �إىل جمموع��ة م��ن امل�ش��كالت الفرعي��ة‬ ‫با�ستخدام اال�ستدعاء الذاتي‪.‬‬ ‫•يف بع���ض األأحي��ان‪ ،‬يَ�س �هُل ا�س��تخدام اال�س��تدعاء الذات��ي‬ ‫ال�ستبدال التكرارات املُتداخلة‪.‬‬ ‫م�ضروب (‪)2‬‬ ‫‪2‬‬ ‫م�ضروب (‪)1‬‬ ‫م�ضروب (‪)0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪3! = 3*2*1 = 6‬‬ ‫�شكل ‪� :2.4‬شجرة اال�ستدعاء الذاتي‬ ‫جدول ‪ :2.2‬مزايا اال�ستدعاء ّ‬ ‫الذاتي‪ ،‬وعيوبه‬ ‫املزايا‬ ‫‪3‬‬ ‫العيوب‬ ‫•يف بع���ض األأحي��ان‪َ ،‬ي�ص ُع��ب تَت ُّب��ع منط��ق دوال‬ ‫اال�ستدعاء التكرارية‪.‬‬ ‫•يتطل��ب اال�س��تدعاء الذات��ي مزي��دً ا م��ن الذاك��رة‬ ‫والوقت‪.‬‬ ‫•ال ي�س��هل حتدي��د احل��االت الت��ي ميك��ن فيه��ا‬ ‫ا�ستخدام دوال اال�ستدعاء التكرارية‪.‬‬ ‫اال�ستدعاء الذاتي والتكرار ‪Recursion and Iteration‬‬ ‫ُي�س��تخدم ك ٌّل م��ن اال�س��تدعاء الذات��ي والتك��رار يف تنفي��ذ جمموع��ة م��ن التعليم��ات لع��دة م��رات‪ ،‬والف��ارق الرئي���س ب�نين‬ ‫اال�ستدعاء الذاتي والتكرار هو طريقة �إنهاء الدالة التكرارية‪ .‬دالة اال�ستدعاء التكرارية ت�ستدعي نف�سها وتُنهي التنفيذ‬ ‫عندم��ا ت�ص��ل �إىل احلال��ة األأ�سا�س��ية‪� .‬أم��ا التك��رار فيُن ِّف��ذ ل ِب َن� َة املقط��ع الربجم��ي با�س��تمرارحتى يتحق��ق �ش��رط ُحُم� َّدد �أو‬ ‫ينق�ضي عدد ُحُم َّدد من التكرارات‪.‬‬ ‫اجلدول التايل يعر�ض بع�ض االختالفات بني اال�ستدعاء الذاتي والتكرار‪.‬‬ ‫جدول ‪ :2.3‬التكرار واال�ستدعاء الذاتي‬ ‫التكرار‬ ‫اال�ستدعاء الذاتي‬ ‫بطيء التنفيذ مقارن ًة بالتكرار‪.‬‬ ‫يتطلب حجم ذاكرة �أكرب‪.‬‬ ‫حجم املقطع الربجمي �أ�صغر‪.‬‬ ‫�سريع التنفيذ‪.‬‬ ‫يتطلب حجم ذاكرة �أقل‪.‬‬ ‫حجم املقطع الربجمي �أكرب‪.‬‬ ‫ينته��ي با�س�‬ ‫عنَّي‪�.‬تكمال الع��دد املُح � َّدد م��ن التك��رارات �أو حتقي��ق ينتهي مبجرد الو�صول �إىل احلالة األأ�سا�سية‪.‬‬ ‫�شرط ُم َّ‬ ‫‪74‬‬ ‫متى ت ِ‬ ‫َ�ستخدم اال�ستدعاء الذاتي؟‬ ‫•يُع ُّد اال�ستدعاء الذاتي الطريقة األأكرث مالئمة للتعامل مع امل�شكلة يف العديد من احلاالت‪.‬‬ ‫•يَ�س ُهل ا�ستك�شاف بع�ض هياكل البيانات با�ستخدام اال�ستدعاء الذاتي‪.‬‬ ‫•بع���ض خوارزمي��ات الت�صني��ف (‪ ،)Sorting Algorithms‬تَ�س� ِ‬ ‫�تخدم اال�س��تدعاء الذات��ي‪ ،‬مث��ل‪ :‬الت�صني��ف ال�س��ريع‬ ‫(‪.)Quick Sort‬‬ ‫يف املثال التايل‪� ،‬ست�ستخرج �أكرب رقم موجود يف قائمة مكونة من األأرقام با�ستخدام دالة اال�ستدعاء التكرارية‪.‬‬ ‫كما يظهر يف ال�سطر األأخري من املثال دالة �أخرى للتكرار لغر�ض املقارنة‪.‬‬ ‫‪def findMaxRecursion(A,n):‬‬ ‫‪if n==1:‬‬ ‫]‪m = A[n-1‬‬ ‫‪else:‬‬ ‫))‪m = max(A[n-1],findMaxRecursion(A,n-1‬‬ ‫‪return m‬‬ ‫‪def findMaxIteration(A,n):‬‬ ‫]‪m = A[0‬‬ ‫‪for i in range(1,n):‬‬ ‫)]‪m = max(m,A[i‬‬ ‫‪return m‬‬ ‫ت�ستخرج الدالة )(‪ max‬العن�صر ذا القيمة‬ ‫األأكرب (العن�صر ذو القيمة األأكرب يف ‪.)myList‬‬ ‫‪# main program‬‬ ‫]‪myList = [3,73,-5,42‬‬ ‫)‪l = len(myList‬‬ ‫)‪myMaxRecursion = findMaxRecursion(myList,l‬‬ ‫)‪print("Max with recursion is: ", myMaxRecursion‬‬ ‫)‪myMaxIteration = findMaxIteration(myList,l‬‬ ‫)‪print("Max with iteration is: ", myMaxIteration‬‬ ‫‪73‬‬ ‫‪73‬‬ ‫‪Max with recursion is:‬‬ ‫‪Max with iteration is:‬‬ ‫))‪max(A[3], findMaxRecursion(A, 3‬‬ ‫))‪max(A[2], findMaxRecursion(A, 2‬‬ ‫))‪max(A[1], findMaxRecursion(A, 1‬‬ ‫‪3‬‬ ‫>‬ ‫>‬ ‫> ‪42‬‬ ‫‪-5‬‬ ‫‪73‬‬ ‫�شكل ‪� :2.5‬شجرة اال�ستدعاء الذاتي لدالة ا�ستخراج �أكرب رقم يف قائمة مكونة من األأرقام‬ ‫‪75‬‬ .‫ �ستُن�شئ دالة ا�ستدعاء تكرارية حل�ساب مُ�ضاعَ ف الرقم‬،‫يف الربنامج التايل‬ ِ �‫ وم��ن َث��مَّ �ستَ�س‬،‫�س��تقوم ب�إدخ��ال رق ًم��ا (األأ�سا���س) وفهر�سً ��ا (األأُ���س �أو ال ُق� ّوَّة) يقبلهم��ا الربنام��ج‬ ‫�تخدم دال��ة اال�س��تدعاء‬ ِ �‫ الت��ي �ستَ�س‬powerFunRecursive() ‫التكراري��ة‬ ‫ ميكن حتقيق األأمر‬.‫�ضاعف الرق��م‬ َ ‫�تخدم هذي��ن املدخَ لَ�نين حل�س��اب ُم‬ :‫يو�ضح ذلك‬ ّ ‫ واملثال التايل‬،‫نف�سه با�ستخدام التكرار‬ def powerFunRecursive(baseNum,expNum): if(expNum==1): return(baseNum) else: return(baseNum*powerFunRecursive(baseNum,expNum-1)) def powerFunIteration(baseNum,expNum): numPower = 1 for i in range(exp): numPower = numPower*base return numPower # main program base = int(input("Enter number: ")) exp = int(input("Enter exponent: ")) numPowerRecursion = powerFunRecursive(base,exp) print( "Recursion: ", base, " raised to ", exp, " = ",numPowerRecursion) numPowerIteration = powerFunIteration(base,exp) print( "Iteration: ", base, " raised to ", exp, " = ",numPowerIteration) Enter number: 10 Enter exponent: 3 Recursion: 10 raised to 3 = 1000 Iteration: 10 raised to 3 = 1000 Infinite Recursive Function ‫دالة اال�ستدعاء التكرارية الالنهائية‬ ‫ كما يجب عليك ا�س��تخدام طريقة معين��ة إلإيقاف التكرار‬،‫يج��ب �أن تك��ون ح��ذرًا للغاي��ة عن��د تنفي��ذ اال�س��تدعاء التك��راري‬ ‫ ال��ذي ي�س� ّبب تو َّق��ف النظ��ام عن اال�س��تجابة‬،‫عن��د حتقي��ق �ش��رط ُحُم� َّدد لتجن��ب ح��دوث اال�س��تدعاء التك��راريّ الالنهائ� ّ�ي‬ .‫) و�إنهاء التطبيق‬Memory Overflow( ‫ مما ي�ؤدي �إىل َفيْ�ض الذاكرة‬،‫ب�سبب كرثة ا�ستدعاءات الدالة‬ 76 ‫الدر�س الثاين‬ ‫خوارزمية البحث ب�أولوية العمق‬ ‫والبحث ب�أولوية االت�ساع‬ ‫البحث يف املُخطَّ طات ‪Searching in Graphs‬‬ ‫تفح���ص كل ُعق��دة يف املُخطَّ ��ط إلإج��راء‬ ‫هن��اك بع���ض احل��االت الت��ي حتت��اج فيه��ا �إىل البح��ث ع��ن عُ ق��دة ُحُم� َّددة يف املُخطَّ ��ط‪� ،‬أو ُّ‬ ‫عملي��ة بعينه��ا مث��ل طباع��ة ُعق��د املُخطَّ ��ط‪ ،‬فتك��ون حالت� َ�ك ك�ش��خ� ٍص يبح��ث ع��ن املدين��ة الت��ي يري��د ال�سّ ��فر �إليه��ا؛ و ليتحقق هذا‪،‬‬ ‫حتتاج �إىل فح�ص كل ُعقدة يف املُخطَّ ط حتى جتد تلك التي حتتاج �إليها‪ُ .‬يطلق على هذا اإلإجراء‪ :‬البحث يف املُخطَّ ط �أو م�س��ح‬ ‫ُخطط‪ ،‬وهناك العديد من خوارزميات البحث التي ت�ساعد على تنفيذه‪ ،‬مثل‪:‬‬ ‫امل َّ‬ ‫•خوارزمية البحث ب�أولوية االت�ساع (‪.)Breadth-First Search - BFS‬‬ ‫•خوارزمية البحث ب�أولوية العمق (‪.)Depth-First Search - DFS‬‬ ‫عُ قدة البث‬ ‫العُقد المجاورة‬ ‫ل ُعقدة البث‬ ‫العُقد األأخرى‬ ‫مثال على خوارزمية البحث ب�أولوية االت�ساع (‪ :)BFS‬البث ال�شبكي‬ ‫خوارزمية البحث ب�أولوية االت�ساع‬ ‫‪Breadth-First Search (BFS) Algorithm‬‬ ‫مثال على خوارزمية البحث ب�أولوية العمق (‪ :)DFS‬حل املتاهة‬ ‫امل�ستوى ‪0‬‬ ‫ت�ستك�ش��ف خوارزمي��ة البح��ث ب�أولوي��ة االت�س��اع (‪ )BFS‬املُخطَّ ��ط بح�س��ب‬ ‫امل�ستوى ً‬ ‫واحدا تلو اآلآخر‪ ،‬حيث تبد�أ بفح�ص عُ قدة اجلذر (عُ قدة البداية)‪ ،‬امل�ستوى ‪1‬‬ ‫ثم تفح�ص جميع العُقد املرتبطة بها ب�شكل مبا�شر واحدة تلو األأخرى‪.‬‬ ‫بع��د االنته��اء م��ن فح���ص كل ال ُعق��د يف امل�س��توى‪ ،‬تنتق��ل �إىل امل�س��توى الت��ايل‪،‬‬ ‫ُو�ضحة يف ال�شكل ‪.2.6‬‬ ‫وتتبع اإلإجراءات نف�سها امل ّ‬ ‫امل�ستوى ‪2‬‬ ‫�ستخدم الطّ ابور لتت ّبع العُقد التي ّمت فح�صها‪ ،‬ومبج ّرد ا�ستك�شاف العُقدة‪،‬‬ ‫ُي َ‬ ‫�ستتم �إ�ضافة ال ُع َقد الفرعية �إىل الطابور‪ ،‬ثم حتذف ال ُعقدة التالية املوجودة‬ ‫يف �أول الطابور التي مت ا�ستك�شافها �سابقًا‪.‬‬ ‫‪A‬‬ ‫‪2‬‬ ‫‪C‬‬ ‫‪G‬‬ ‫‪1‬‬ ‫‪B‬‬ ‫‪3‬‬ ‫‪F‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫�شكل ‪ :2.6‬خوارزمية البحث ب�أولوية االت�ساع (‪)BFS‬‬ ‫‪79‬‬ ‫املث��ال الت��ايل يو�ض��ح طريق��ة عم��ل خوارزمي��ة البح��ث ب�أولوية االت�س��اع (‪ .)BFS‬با�س��تخدام املُخطَّ ط الت��ايل‪ ،‬حدِّ د العُقد‬ ‫التي يجب فح�صها لالنتقال من عُ قدة اجلذر ‪� A‬إىل ال ُعقدة ‪:F‬‬ ‫ِ‬ ‫ا�ستخدم هيكل البيانات املُنا�سب‪.‬‬ ‫مالحظة‪:‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫عليك فح�ص كل العُقد يف امل�ستوى ‪1‬‬ ‫قبل االنتقال �إىل العُقد يف امل�ستوى ‪.2‬‬ ‫‪2‬‬ ‫املُخطَّ ط‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫الطابور‬ ‫البداي��ة م��ن ال ُعق��دة اجلذرية‬ ‫(ال ُعق��دة ‪� .)A‬أ�ض��ف ال ُعق��دة‬ ‫اجلذريّة �إىل الطابور‪.‬‬ ‫‪2‬‬ ‫اح��ذف ال ُعق��دة اجلذر ّي��ة م��ن‬ ‫الطاب��ور ملعاجلته��ا‪ ،‬ث��م �أ�ض��ف‬ ‫ف��روع ه��ذه ال ُعق��دة �إىل الطاب��ور‬ ‫(العُقدتني ‪ B‬و‪.)C‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪80‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫فُحِ َ�صت‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪ 3‬ا ح��ذف ال ُعق��دة م��ن مقد م��ة‬ ‫الطاب��ور (ال ُعق��دة ‪ )B‬ملعاجلته��ا‪،‬‬ ‫ث��م �أ�ض��ف ف��روع ه��ذه ال ُعق��دة �إىل‬ ‫الطابور (العُقدتني ‪ D‬و‪.)E‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪F‬‬ ‫‪C‬‬ ‫‪E‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪B‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪D‬‬ ‫‪A‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪B‬‬ ‫‪0‬‬ ‫‪C‬‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫‪C‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪ 4‬اح��ذف ال ُعق��دة ‪ C‬وعاجله��ا‪،‬‬ ‫ثم �أ�ضف فرعها �إليها‪.‬‬ ‫‪ 5‬احذف العُقدة ‪ D‬ملعاجلتها‪.‬‬ ‫(لي�س لديها فروع)‪.‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪F‬‬ ‫‪C‬‬ ‫‪E‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪ 6‬احذف العُقدة ‪ E‬ملعاجلتها‪.‬‬ ‫(لي�س لديها فروع)‪.‬‬ ‫‪D‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪F‬‬ ‫‪C‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪E‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪D‬‬ ‫‪F‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪0‬‬ ‫‪  7‬اح��ذف ال ُعق��دة ‪ F‬ملعاجلته��ا‪ ،‬وبذل��ك �أ�صب��ح‬ ‫الطابور اآلآن فارغً ا وانتهت عملية البحث‪.‬‬ ‫العُقد التي فُحِ �صَ ت با�ستخدام خوارزمية البحث‬ ‫ب�أولوية االت�ساع (‪ )BFS‬هي‪.F ،E ،D ،C ،B ،A :‬‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫الحظ كيف ُمُيكنك تطبيق خوارزمية البحث ب�أولوية االت�ساع (‪ )BFS‬بلغة البايثون (‪ )Python‬يف املثال التايل‪:‬‬ ‫{ = ‪graph‬‬ ‫‪"A" : ["B","C"],‬‬ ‫‪"B" : ["D","E"],‬‬ ‫‪"C" : ["F"],‬‬ ‫‪"D" : [],‬‬ ‫‪"E" : [],‬‬ ‫][ ‪"F" :‬‬ ‫}‬ ‫‪visitedBFS = [] # List to keep track of visited nodes‬‬ ‫‪# Initialize a queue‬‬ ‫][ = ‪queue‬‬ ‫‪# bfs function‬‬ ‫‪def bfs(visited, graph, node):‬‬ ‫)‪visited.append(node‬‬ ‫‪81‬‬ ‫)‪queue.append(node‬‬ ‫‪while queue:‬‬ ‫)‪n = queue.pop(0‬‬ ‫)" " = ‪print (n, end‬‬ ‫‪for neighbor in graph[n]:‬‬ ‫‪if neighbor not in visited:‬‬ ‫)‪visited.append(neighbor‬‬ ‫)‪queue.append(neighbor‬‬ ‫‪# main program‬‬ ‫)"‪bfs(visitedBFS, graph, "A‬‬ ‫‪A B C D E F‬‬ ‫التطبيقات العملية خلوارزمية البحث ب�أولوية االت�ساع‬ ‫‪Practical Applications of the BFS Algorithm‬‬ ‫تُ�س��تخدَ م يف �ش��بكات ال ّنظ�رير لل ّنظ�رير (‪ )Peer-to-Peer Networks‬للعث��ور عل��ى كل‬ ‫ال ُعقد املجاورة من �أجل ت�أ�سي�س االت�صال‪.‬‬ ‫تُ�س��تخدَ م يف و�س��ائل التوا�ص��ل االجتماع��ي (‪ )Social Media‬لرب��ط عُ ق��د امُلُ�س� ِ‬ ‫�تخدمني‬ ‫املُرتبطني‪ ،‬مثل �أولئك الذين لهم االهتمامات نف�سها �أو املوقع نف�سه‪.‬‬ ‫تُ�س��تخدَ م يف ُنظ��م املالح��ة با�س��تخدام ُحُم �دِّد املواق��ع العامل��ي (‪GPS Navigation‬‬ ‫‪ )Systems‬للبحث عن األأماكن املتجاورة حتى ُحُت ِّدد االجتاهات التي يتبعها املُ�ستخدِ م‪.‬‬ ‫تُ�ستخدَ م للح�صول على البث ال�شبكي (‪ )Network Broadcasting‬لبع�ض احلُزم‪.‬‬ ‫معلومة‬ ‫ُمُيكن تطوير خوارزمية البحث ب�أولوية االت�ساع (‪ )BFS‬بتحديد نقطة البداية‬ ‫(احلالة األأوليّة) ونقطة الهدف (احلالة امل ُ�سته َدفة) إلإيجاد امل�سار بينهما‪.‬‬ ‫‪82‬‬ ‫خوارزمية البحث ب�أولوية العمق‬ ‫امل�ستوى ‪0‬‬ ‫‪Depth-First Search (DFS) Algorithm‬‬ ‫يف البح�ث ب�أولوي�ة العم�ق (‪� ،)DFS‬س�تقوم باتب�اع احلواف‪ ،‬وتتعمق �أكرث‬ ‫و�أكرث يف املُخطَّ ط‪َ .‬ي ِ‬ ‫�ستخدم البحث ب�أولوية العمق �إجراء ا�ستدعاء تكراري‬ ‫للتنقل عرب ال ُعقد‪ .‬عند الو�صول �إىل ُعقدة ال حتتوي على حواف ألأي ُعقدة‬ ‫جديدة‪� ،‬س�تعود �إىل ال ُعقدة ال�س�ابقة وت�س�تمر العملية‪ .‬ت ِ‬ ‫َ�ستخدم خوارزمية‬ ‫البح�ث ب�أولوي�ة العم�ق هي�كل بيان�ات املُك ّد��س لتتب�ع م�س�ار اال�ستك�ش�اف‪.‬‬ ‫مبجرد ا�ستك�شاف ُعقدة‪� ،‬س ُت�ضاف �إىل املُكدّ�س‪ .‬عندما ترغب يف العودة‪،‬‬ ‫�ستحذف ال ُعقدة من املُكدّ�س كما هو مو�ضح يف ال�شكل ‪.2.7‬‬ ‫‪A‬‬ ‫امل�ستوى ‪1‬‬ ‫‪1‬‬ ‫‪C‬‬ ‫امل�ستوى ‪2‬‬ ‫‪B‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪G‬‬ ‫‪F‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪E‬‬ ‫‪2‬‬ ‫‪D‬‬ ‫�شكل ‪ :2.7‬خوارزمية البحث ب�أولوية العمق (‪)DFS‬‬ ‫املثال التايل يو�ضح طريقة عمل خوارزمية البحث ب�أولوية العمق (‪ ،)DFS‬با�ستخدام املُخطَّ ط التايل‪َ ،‬ت َتبّع ترتيب ا�ستك�شاف‬ ‫العُقد (‪ )Traversal‬بح�سب خوارزمية البحث ب�أولوية العمق‪.‬‬ ‫ِ‬ ‫ا�ستخدم هيكل البيانات املُنا�سب‪.‬‬ ‫مالحظة‪:‬‬ ‫‪ 1‬عا ِلج اجلذر ‪ A‬ثم �أ�ضفه �إىل املُكدّ�س‪.‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫املُكدّ�س‬ ‫‪2‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪A‬‬ ‫املُخطَّ ط‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪ 3‬عا ِلج العُقدة ‪ D‬ثم �أ�ضفها �إىل املُكدّ�س‪� .‬ستُحذَ ف‬ ‫ال ُعق��دة الت��ي ف ُِح َ�ص��ت ولي���س له��ا ف��روع م��ن‬ ‫املُكدّ�س‪(.‬احذف العُقدة ‪.)D‬‬ ‫عا ِلج العُقدة ‪ B‬ثم �أ�ضفها �إىل املُكدّ�س‪.‬‬ ‫فُحِ َ�صت‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪D‬‬ ‫‪C‬‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪A‬‬ ‫‪D‬‬ ‫‪D‬‬ ‫‪B‬‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫‪ 4‬عا ِل��ج ال ُعق��دة ‪ E‬ثم �أ�ضفها �إىل املُك ّد���س‪� .‬س�تُحذَ ف العُقدة التي‬ ‫ف ُِح َ�صت ولي�س لها فروع من املُكدّ�س‪(.‬احذف العُقدة ‪.)E‬‬ ‫ملحة تاريخية‬ ‫‪A‬‬ ‫‪E‬‬ ‫‪E‬‬ ‫‪B‬‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪D‬‬ ‫طُ ورّت الن�سخة األأوىل من خوارزمية البحث ب�أولوية‬ ‫العمق (‪ )DFS‬يف القرن التا�سع ع�شر بوا�سطة عامل‬ ‫ريا�ضيات فرن�سي كا�سرتاتيجية حلل املتاهات‪.‬‬ ‫‪83‬‬ ‫‪5‬‬ ‫‪ 6‬عا ِلج العُقدة ‪ C‬ثم �أ�ضفها �إىل املُكدّ�س‪.‬‬ ‫احذف العُقدة ‪.B‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪A‬‬ ‫‪F‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪A‬‬ ‫‪D‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪C‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪F‬‬ ‫‪A‬‬ ‫‪C‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪A‬‬ ‫‪F‬‬ ‫‪F‬‬ ‫‪D‬‬ ‫‪ 8‬املُك ّد���س خ��ايل وبالت��ايل �س��تتوقف خوارزمي��ة البح��ث‬ ‫ب�أولوية العمق (‪.)DFS‬‬ ‫‪ 7‬عا ِلج العُقدة ‪ F‬ثم �أ�ضفها �إىل املُكدّ�س‪.‬‬ ‫‪F‬‬ ‫‪C‬‬ ‫‪C‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪A‬‬ ‫واآلآن �س��تتعلّم طريق��ة تنفي��ذ خوارزمي��ة البح��ث ب�أولوي��ة العم��ق‬ ‫(‪ )DFS‬يف لغة البايثون‪.‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪F‬‬ ‫‪B‬‬ ‫‪E‬‬ ‫العُقد التي فُحِ �صَ ت با�ستخدام خوارزمية البحث‬ ‫ب�أولوية العمق (‪ )DFS‬هي‪.F ،C ،E ،D ،B ،A :‬‬ ‫‪["B","C"],‬‬ ‫‪["D","E"],‬‬ ‫‪["F"],‬‬ ‫‪[],‬‬ ‫‪[],‬‬ ‫][‬ ‫{‬ ‫‪:‬‬ ‫‪:‬‬ ‫‪:‬‬ ‫‪:‬‬ ‫‪:‬‬ ‫‪:‬‬ ‫= ‪graph‬‬ ‫"‪"A‬‬ ‫"‪"B‬‬ ‫"‪"C‬‬ ‫"‪"D‬‬ ‫"‪"E‬‬ ‫"‪"F‬‬ ‫}‬ ‫‪visitedDFS = [] # list to keep track of visited nodes‬‬ ‫‪# dfs function‬‬ ‫يُ�ستخدم المُكدّ�س ب�صورة غير‬ ‫مبا�شرة عبر مُكدّ�س �أثناء الت�شغيل‬ ‫(‪ )Runtime Stack‬لتت ُّبع‬ ‫اال�ستدعاءات التكرارية‪.‬‬ ‫‪def dfs(visited, graph, node):‬‬ ‫‪if node not in visited:‬‬ ‫)" " = ‪print(node, end‬‬ ‫)‪visited.append(node‬‬ ‫‪for neighbor in graph[node]:‬‬ ‫)‪dfs(visited, graph, neighbor‬‬ ‫‪# main program‬‬ ‫)"‪dfs(visitedDFS, graph, "A‬‬ ‫‪A B D E C F‬‬ ‫‪84‬‬ ‫‪D‬‬ ‫التطبيقات العملية خلوارزمية البحث ب�أولوية العمق‬ ‫‪Practical Applications of the DFS Algorithm‬‬ ‫تُ�س��تخدَ م خوارزمي��ة البح��ث ب�أولوي��ة العم��ق يف �إيج��اد امل�س��ارات (‪)Path Finding‬‬ ‫ال�ستك�شاف امل�سارات املختلفة يف العمق للخرائط والطرقات والبحث عن امل�سار األأف�ضل‪.‬‬ ‫تُ�س��تخدَ م خوارزمي��ة البح��ث ب�أولوي��ة العم��ق يف حل املتاه��ات (‪ )Solve Mazes‬من خالل‬ ‫اجتياز كل الطُ ُرق املمكنة‪.‬‬ ‫ُمُي ِك��ن حتدي��د ال��دورات (‪ )Cycles‬يف املُخطَّ ��ط با�س��تخدام خوارزمي��ة البح��ث ب�أولوي��ة‬ ‫العم��ق م��ن خ�الال وج��ود حاف��ة خلفي��ة (‪ُ ،)Back Edge‬مت��ر م��ن خ�الال ال ُعق��دة نف�س��ها‬ ‫مرتني‪.‬‬ ‫جدول ‪ :2.4‬مقارنة بني خوارزمية البحث ب�أولوية االت�ساع (‪ )BFS‬و خوارزمية البحث ب�أولوية العمق (‪)DFS‬‬ ‫خوارزمية البحث ب�أولوية االت�ساع (‪ )BFS‬خوارزمية البحث ب�أولوية العمق (‪)DFS‬‬ ‫معايري املقارنة‬ ‫طريقة التنفيذ‬ ‫التنقّل ح�سب م�ستوى ال�شجرة‪.‬‬ ‫التنقّل ح�سب ُعمق ال�شجرة‪.‬‬ ‫هيكل البيانات‬ ‫تَ�س� ِ‬ ‫�تخدم هيكل بيانات الطابور لتت ُّبع املوقع‬ ‫التايل لفح�صه‪.‬‬ ‫تَ�س��تخدِ م هي��كل بيان��ات املُك ّد���س لتت ُّب��ع‬ ‫املوقع التايل لفح�صه‪.‬‬ ‫اال�ستخدام‬ ‫ُف�ض��ل ا�س��تخدامها عندم��ا يك��ون هي��كل‬ ‫ي َّ‬ ‫املُخطَّ ط وا�سعًا وق�صريًا‪.‬‬ ‫ُف�ض��ل ا�س��تخدامها عندم��ا يك��ون هي��كل‬ ‫ي َّ‬ ‫وطوياًل‪.‬‬ ‫ً‬ ‫املُخطَّ ط �ضيقًا‬ ‫طريقة البحث‬ ‫تبح��ث ع��ن م�س��ار الوجه��ة با�س��تخدام �أق��ل‬ ‫عدد من احلواف‪.‬‬ ‫يتج��ة البح��ث �إىل قاع ال�ش��جرة الفرعية‪،‬‬ ‫ثم يرتاجع‪.‬‬ ‫فح�ص عُ قد األأ�شقاء قبل الفروع‪.‬‬ ‫فح�ص عُ قد الفروع قبل األأ�شقاء‪.‬‬ ‫العُقد التي تُفح�ص يف‬ ‫البداية‬ ‫‪85‬‬ ‫الدر�س الثالث‬ ‫اتخاذ القرار القائم على القواعد‬ ‫األأنظمة القائمة على القواعد ‪Rule-Based Systems‬‬ ‫تُر ِّك��ز �أنظم��ة ال��ذكاء اال�صطناع��ي القائم��ة على القواعد على ا�س��تخدام جمموعة من القواعد املُح َّددة ُم�س��بقًا التخاذ القرارات‬ ‫وح��ل امل�ش��كالت‪ .‬األأنظم��ة اخلب�ريرة (‪ )Expert Systems‬ه��ي املث��ال األأك�رثر �ش��هرة لل��ذكاء اال�صطناع��ي القائ��م عل��ى القواعد‪،‬‬ ‫وهي �إحدى �صور الذكاء اال�صطناعي األأوىل التي طُ وِّرت وانت�شرت يف فرتة الثمانينيات والت�سعينيات من القرن املا�ضي‪ .‬وغالبًا‬ ‫�تخدم ألأمتت��ة امله��ام الت��ي تتطلب عاد ًة خربات ب�ش��رية مثل‪ :‬ت�ش��خي�ص احل��االت الطبية �أو حتديد امل�ش��كالت التقنية‬ ‫م��ا كان��ت ُت�س� َ‬ ‫و�إ�صالحها‪ .‬واليوم مل َتعُد األأنظمة القائمة على القواعد التقنية هي األأحدث‪ ،‬حيث تف ّوقت عليها منهجيات الذكاء اال�صطناعي‬ ‫احلديث��ة‪ .‬وم��ع ذل��ك‪ ،‬ال ت��زال األأنظم��ة اخلب�ريرة �ش��ائعة اال�س��تخدام يف العديد من املجاالت نظرًا لقدرته��ا على اجلمع بني األأداء‬ ‫املعقول وعملية اتخاذ القرار البديهية والقابلة للتف�سري‪.‬‬ ‫قاعدة املعرِ فة ‪Knowledge Base‬‬ ‫�أح��د املكون��ات الرئي�س��ة ألأنظم��ة ال��ذكاء اال�صطناع��ي القائم��ة عل��ى القواع��د ه��ي‬ ‫قاع��دة املعرِ ف��ة‪ ،‬وه��ي جمموع��ة م��ن احلقائ��ق والقواع��د الت��ي َي�س� ِ‬ ‫�تخدمها النظ��ام‬ ‫دخ��ل ه��ذه احلقائ��ق والقواع��د يف النظ��ام بوا�س��طة اخل�ربراء‬ ‫التخ��اذ الق��رارات‪ُ .‬ت َ‬ ‫الب�ش��ريني امل�س��ؤولني ع��ن حتدي��د املعلوم��ات األأك�رثر �أهمي��ة وحتدي��د القواع��د الت��ي‬ ‫يتَّبعه��ا النظ��ام‪ .‬التخ��اذ الق��رار �أو ح��ل املُ�ش��كلة‪ ،‬يبد�أ النظام اخلب�رير بالتحقق من‬ ‫احلقائ��ق والقواع��د يف قاع��دة البيان��ات و تطبيقه��ا عل��ى املوق��ف احل��ايل‪� .‬إن مل‬ ‫يتمك��ن النظ��ام م��ن العث��ور عل��ى تطاب��ق بني احلقائ��ق والقواعد يف قاع��دة املعرِ فة‪،‬‬ ‫فق��د يطل��ب م��ن املُ�س� ِ‬ ‫�تخدم معلوم��ات �إ�ضافي��ة �أو �إحال��ة امل�ش��كلة �إىل خب�رير ب�ش��ري‬ ‫ملزي��د م��ن امل�س��اعدة‪ ،‬و�إلي� َ�ك بع���ض مزاي��ا وعي��وب األأنظم��ة القائم��ة عل��ى القواع��د‬ ‫مو�ضحة يف جدول ‪:2.5‬‬ ‫األأنظمة اخلبرية‬ ‫(‪:)Expert systems‬‬ ‫النظ��ام اخلب�رير ه��و �أحد �أن��واع الذكاء‬ ‫اال�صطناع��ي ال��ذي ُيحاك��ي ق��درة‬ ‫اتخ��اذ الق��رار ل��دى اخلب�رير الب�ش��ري‪.‬‬ ‫َي�س� ِ‬ ‫�تخد م النظ��ام قا ع��دة املعرِ ف��ة‬ ‫املُك َّون��ة من قواعد وحقائق وحمركات‬ ‫اال�س��تدالل لتق��دمي امل�ش��ورة �أو ح��ل‬ ‫امل�شكالت يف جمال معريف ُحُم َّدد‪.‬‬ ‫جدول ‪ :2.5‬املزايا والعيوب الرئي�سة لألأنظمة القائمة على القواعد‬ ‫املزايا‬ ‫• ُمُيكنه��ا اتخ��اذ الق��رارات وح��ل امل�ش��كالت ب�س��رعة‬ ‫وبدق��ة �أف�ض��ل م��ن الب�ش��ر‪ ،‬خا�ص ًة عندم��ا يتعلق األأمر‬ ‫بامله��ام الت��ي تتطل��ب ق��درًا كب�ريرًا م��ن املعرِ ف��ة �أو‬ ‫البيانات‪.‬‬ ‫•تَعم��ل ه��ذه األأنظم��ة با�س��تمرار‪ ،‬دون حت ُّي��ز �أو �أخط��اء‬ ‫ق��د ت�ؤث��ر يف بع���ض األأحي��ان عل��ى اتخ��اذ الق��رار‬ ‫الب�شري‪.‬‬ ‫العيوب‬ ‫•تَعم��ل ه��ذه األأنظم��ة بكف��اءة طامل��ا كان��ت مُدخَ �الات املعرِ ف��ة‬ ‫والقواع��د جي��دة‪ ،‬وق��د ال ت�س��تطيع التعام��ل م��ع املواق��ف الت��ي‬ ‫تقع خارج نطاق خرباتها‪.‬‬ ‫•ال ُمُيكنه��ا التعلُّ��م �أو التك ُّي��ف بالطريق��ة نف�س��ها مث��ل الب�ش��ر‪،‬‬ ‫وه��ذا يجعله��ا �أق��ل قابلي��ة للتطبي��ق عل��ى األأح��داث املُتغ� ِّرِّيرة‬ ‫دخالت البيانات واملنطق كثريًا مبرور الوقت‪.‬‬ ‫حيث تتغري ُم َ‬ ‫‪89‬‬ ‫يف ه��ذا الدر���س �س��تتعلّم املزي��د ح��ول األأنظم��ة القائم��ة عل��ى القواع��د يف �س��ياق �أح��د تطبيقاته��ا‬ ‫�خي�صا طب ًي��ا وف ًق��ا لألأعرا���ض الت��ي‬ ‫الرئي�س��ة‪ ،‬وه��و‪ :‬الت�ش��خي�ص الطب��ي‪� .‬س��يعر�ض النظ��ام ت�ش� ً‬ ‫و�ض��ح يف ال�ش��كل ‪ .2.8‬ب��دءًا بنظ��ام ت�ش��خي�ص ب�س��يط ُم�س��ت ِند‬ ‫تظه��ر عل��ى املري���ض‪ ،‬كم��ا ه��و ُم ّ‬ ‫�إىل القواعد‪ ،‬و�ستكت�شف بع�ض األأنظمة األأكرث ذكا ًء وكيف ُيحقِّق كل تكرار نتائج �أف�ضل‪.‬‬ ‫نظام ذكاء ا�صطناعي قائم على القواعد‬ ‫قاعدة املعرِفة‬ ‫مر�ض ‪1‬‬ ‫�أعرا�ض‬ ‫مر�ض ‪2‬‬ ‫‪1‬‬ ‫اإلإ�صدار‬ ‫يف اإلإ�ص��دار األأول �س��تبني نظامً ��ا ب�س��يطً ا قائ ًم��ا عل��ى القواع��د ميكن��ه ت�ش��خي�ص ثالث��ة �أمرا���ض‬ ‫ُحُمتمل��ة‪( KidneyStones :‬ح�ص��ى ال ُكل��ى)‪ ،‬و‪( Appendicitis‬الته��اب الزائ��دة الدودي��ة)‪،‬‬ ‫و‪( Food Poisoning‬الت�س�مُم الغذائ��ي)‪� .‬س��تكون املُدخَ �الات �إىل النظ��ام ه��ي قاع��دة معرف��ة‬ ‫ب�س��يطة ترب��ط كل مر���ض بقائم��ة م��ن األأعرا���ض املُحتمل��ة‪ .‬يتو ّف��ر ذل��ك يف ملف بتن�س��يق ‪JSON‬‬ ‫و�ضح باألأ�سفل‪.‬‬ ‫(جي�سون) ُمُيكنك حتميله وعر�ضه كما هو ُم َّ‬ ‫�أعرا�ض‬ ‫'‪symptom_mapping_file='symptom_mapping_v1.json‬‬ ‫‪h‬‬ ‫‪g‬‬ ‫‪f‬‬ ‫‪e‬‬ ‫‪l‬‬ ‫‪k‬‬ ‫‪j‬‬ ‫‪i‬‬ ‫مر�ض ‪3‬‬ ‫�أعرا�ض‬ ‫‪import json # a library used to save and load JSON files‬‬ ‫‪# the file with the symptom mapping‬‬ ‫‪d‬‬ ‫‪c‬‬ ‫‪b‬‬ ‫‪a‬‬ ‫مري�ض ‪1‬‬ ‫‪j‬‬ ‫�أعرا�ض‬ ‫‪a‬‬ ‫‪d‬‬ ‫مري�ض ‪2‬‬ ‫‪b‬‬ ‫‪k‬‬ ‫�أعرا�ض‬ ‫‪e‬‬ ‫‪g‬‬ ‫‪f‬‬ ‫‪# open the mapping JSON file and load it into a dictionary‬‬ ‫‪with open(symptom_mapping_file) as f:‬‬ ‫)‪mapping=json.load(f‬‬ ‫‪# print the JSON file‬‬ ‫))‪print(json.dumps(mapping, indent=2‬‬ ‫{ ‪"diseases":‬‬ ‫[ ‪"food poisoning":‬‬ ‫‪"vomiting",‬‬ ‫‪"abdominal pain",‬‬ ‫‪"diarrhea",‬‬ ‫"‪"fever‬‬ ‫‪],‬‬ ‫[ ‪"kidney stones":‬‬ ‫‪"lower back pain",‬‬ ‫‪"vomiting",‬‬ ‫"‪"fever‬‬ ‫‪],‬‬ ‫[ ‪"appendicitis":‬‬ ‫‪"abdominal pain",‬‬ ‫‪"vomiting",‬‬ ‫"‪"fever‬‬ ‫]‬ ‫}‬ ‫‪90‬‬ ‫{‬ ‫}‬ ‫مر�ض‬ ‫‪1‬‬ ‫مر�ض‬ ‫‪2‬‬ ‫مر�ض‬ ‫‪3‬‬ ‫الت�شخي�صات‬ ‫�شكل ‪ :2.8‬الت�شخي�ص الطبي بوا�سطة نظام‬ ‫الذكاء اال�صطناعي القائم على القواعد‬ ‫�س��يتَّبع اإلإ�ص��دار األأول القائ��م عل��ى القواع��د قاع��دة ب�س��يطة �أال وه��ي‪� :‬إذا كان ل��دى املري���ض عل��ى األأق��ل ثالثً��ا م��ن جمي��ع‬ ‫األأعرا���ض املحتمل��ة للمر���ض‪ ،‬فيج��ب �إ�ضاف��ة املر���ض كت�ش��خي�ص ُحُم َتم��ل‪ .‬ميكن��ك العث��ور �أدن��اه عل��ى دال��ة ‪Python‬‬ ‫(البايث��ون) الت��ي تَ�س� ِ‬ ‫�تخدم ه��ذه القاع��دة إلإج��راء الت�ش��خي�ص‪ ،‬باال�س��تناد �إىل قاع��دة املعرِ ف��ة املذك��ورة �أع�الاه و�أعرا���ض‬ ‫املر�ض الظاهرة على املري�ض‪.‬‬ ‫‪def diagnose_v1(patient_symptoms:list):‬‬ ‫‪diagnosis=[] # the list of possible diseases‬‬ ‫‪if "vomiting" in patient_symptoms:‬‬ ‫‪if "abdominal pain" in patient_symptoms:‬‬ ‫‪if "diarrhea" in patient_symptoms:‬‬ ‫‪# 1:vomiting, 2:abdominal pain, 3:diarrhea‬‬ ‫)'‪diagnosis.append('food poisoning‬‬ ‫‪elif 'fever' in patient_symptoms:‬‬ ‫‪# 1:vomiting, 2:abdominal pain, 3:fever‬‬ ‫)'‪diagnosis.append('food poisoning‬‬ ‫)'‪diagnosis.append('appendicitis‬‬ ‫‪elif "lower back pain" in patient_symptoms and 'fever' in patient_symptoms:‬‬ ‫‪# 1:vomiting, 2:lower back pain, 3:fever‬‬ ‫)'‪diagnosis.append('kidney stones‬‬ ‫\‪patient_symptoms and‬‬ ‫‪elif "abdominal pain" in‬‬ ‫\‪"diarrhea" in patient_symptoms and‬‬ ‫\‪"fever" in patient_symptoms:‬‬ ‫‪# 1:abdominal pain, 2:diarrhea, 3:fever‬‬ ‫)'‪diagnosis.append('food poisoning‬‬ ‫‪return diagnosis‬‬ ‫يف ه��ذه احلال��ة‪ ،‬تك��ون قاع��دة املعرِ ف��ة حم��دد ًة بتعليم��اتٍ برجمي � ٍة ثابت��ة (‪ )Hard-Coded‬داخ��ل الدال��ة يف �ش��كل‬ ‫عبارات ‪ .IF‬ت ِ‬ ‫َ�ستخدم هذه العبارات األأعرا�ض ال�شائعة بني األأمرا�ض الثالثة للتو�صل تدريجيًا �إىل الت�شخي�ص يف �أ�سرع‬ ‫وق��ت ممك��ن‪ .‬عل��ى �س��بيل املث��ال‪ ،‬عَ ر���ض ‪( Vomiting‬الق��يء) م�ش�رترك بني جمي��ع األأمرا�ض‪ .‬لذل��ك‪� ،‬إذا كانت عبارة ‪IF‬‬ ‫األأوىل �صحيح��ة فق��د مت بالفع��ل ح�س��اب �أح��د األأعرا���ض الثالث��ة املطلوب��ة جلمي��ع األأمرا���ض‪ .‬بع��د ذل��ك‪� ،‬س��وف تب��د�أ يف‬ ‫البح��ث ع��ن ‪�( Abdominal Pain‬أمل البط��ن) املرتب��ط مبر�ض�نين وت�س��تمر بالطريق��ة نف�س��هاحتى يت��م النظ��ر يف جمي��ع‬ ‫جمموعات األأعرا�ض املمكنة‪.‬‬ ‫‪91‬‬ ‫ُمُيكنك بعد ذلك اختبار هذه الدالة على ثالثة مر�ضى خمتلفني‪:‬‬ ‫‪# Patient 1‬‬ ‫]'‪my_symptoms=['abdominal pain', 'fever', 'vomiting‬‬ ‫)‪diagnosis=diagnose_v1(my_symptoms‬‬ ‫)‪print('Most likely diagnosis:',diagnosis‬‬ ‫‪# Patient 2‬‬ ‫] '‪my_symptoms=['vomiting', 'lower back pain', 'fever‬‬ ‫)‪diagnosis=diagnose_v1(my_symptoms‬‬ ‫)‪print('Most likely diagnosis:',diagnosis‬‬ ‫‪# Patient 3‬‬ ‫]'‪my_symptoms=['fever', 'cough', 'vomiting‬‬ ‫)‪diagnosis=diagnose_v1(my_symptoms‬‬ ‫)‪print('Most likely diagnosis:',diagnosis‬‬ ‫]'‪Most likely diagnosis: ['food poisoning', 'appendicitis‬‬ ‫]'‪Most likely diagnosis: ['kidney stones‬‬ ‫][ ‪Most likely diagnosis:‬‬ ‫املري�ض ‪1‬‬ ‫املري�ض ‪2‬‬ ‫املري�ض ‪3‬‬ ‫األأعرا�ض‪:‬‬ ‫األأعرا�ض‪:‬‬ ‫األأعرا�ض‪:‬‬ ‫•‪Abdominal pain‬‬ ‫(�أمل يف البطن)‬ ‫•‪( Fever‬احلُمى)‬ ‫•‪( Vomiting‬القيء)‬ ‫•‪( Vomiting‬القيء)‬ ‫•‪Lower back pain‬‬ ‫(�أمل ب�أ�سفل الظهر)‬ ‫•‪( Fever‬احلُمى)‬ ‫•‪( Fever‬احلُمى)‬ ‫•‪( Cough‬ال�سُ عال)‬ ‫•‪( Vomiting‬القيء)‬ ‫الت�شخي�ص الطبي با�ستخدام نظام الذكاء اال�صطناعي القائم على القواعد | ‪symptom_mapping_v1.json‬‬ ‫‪Food poisoning or Appendicitis‬‬ ‫(الت�س ُمم الغذائي �أو التهاب الزائدة الدودية)‬ ‫‪92‬‬ ‫‪( Kidney stones‬ح�صى ال ُكلى)‬ ‫�شكل ‪ :2.9‬متثيل اإلإ�صدار األأول‬ ‫؟‬ ‫يت�ضم��ن الت�ش��خي�ص الطب��ي للمري���ض األأول الت�س� ُمم الغذائ��ي والتهاب الزائدة الدودي��ة ألأن األأعرا�ض الثالثة التي تظهر‬ ‫عل��ى املري���ض ترتب��ط ب��كال املر�ض�نين‪ .‬يُ�ش� َّ�خ�ص املري���ض الث��اين بح�ص��ى ال ُكل��ى‪ ،‬فه��و املر���ض الوحي��د ال��ذي جتتم��ع في��ه‬ ‫األأعرا���ض الثالث��ة‪ .‬يف النهاي��ة‪ ،‬ال ُمُيك��ن ت�ش��خي�ص احلال��ة الطبي��ة للمري���ض الثال��ث؛ ألأن األأعرا���ض الثالث��ة الت��ي ظهرت‬ ‫على املري�ض ال جتتمع يف � ٍأي من األأمرا�ض الثالثة‪.‬‬ ‫يتميز اإلإ�صدار األأول القائم على القواعد بالبديهية والقابلية للتف�س�رير‪ ،‬كما يت�ضمن ا�س��تخدام قاعدة املعرِ فة والقواعد‬ ‫يف الت�ش��خي�ص الطب��ي دون َحَت ُّي��ز �أو انح��راف ع��ن اخل��ط املعي��اري‪ .‬وم��ع ذلك‪ ،‬ي�ش��وب ه��ذا اإلإ�صدار العدي��د من العيوب‪:‬‬ ‫ب�س��ط للغاي��ة لكيفية الت�ش��خي�ص الطبي على يد اخلبري الب�ش��ري‪.‬‬ ‫� ًأواًل‪� ،‬أن قاع��دة ثالث��ة �أعرا���ض عل��ى األأق��ل ه��ي متثي��ل ُم َّ‬ ‫بتعليمات برجمي ٍة ثابتة‪ ،‬وعلى الرغم من �أنه ي�س� ُهل �إن�ش��اء عبارات‬ ‫ٍ‬ ‫ثان ًي��ا‪� ،‬أن قاع��دة املعرِ ف��ة داخ��ل الدال��ة تك��ون حم��دد ًة‬ ‫طوياًل عند ت�شخي�ص احلاالت‬ ‫تعقيدا وت�ستغرق وقتًا ً‬ ‫�شَ رط َّية ب�سيطة لقواعد املعرِ فة ال�صغرية‪� ،‬إال �أن املهمة ت�صبح �أكرث ً‬ ‫التي تعاين من العديد من األأمرا�ض واألأعرا�ض املر�ضية‪.‬‬ ‫اإلإ�صدار ‪2‬‬ ‫يف اإلإ�صدار الثاين‪� ،‬ستُعزِّ ز مرونة وقابلية تطبيق النظام القائم على القواعد بتمكينه من قراءة قاعدة ِ‬ ‫ُتغرِّية‬ ‫املعرفة امل ِّ‬ ‫مبا�ش��ر ًة م��ن مل��ف ‪( JSON‬ج�س��ون)‪� .‬س��ي�ؤدي ه��ذا �إىل احل��د م��ن عملي��ة الهند�س��ة اليدوي��ة لعبارات ‪ IF‬ال�شَ ��رطيَّة ح�س��ب‬ ‫قاباًل للتطبيق على قواعد املعرِ فة األأكرب حجمًا مع تزايد‬ ‫حت�س ًنا كبريًا يجعل النظام ً‬ ‫األأعرا�ض �ضمن الدالة‪ .‬وهذا ُيع ُّد ُّ‬ ‫يو�ضح قاعدة املعرِ فة‪.‬‬ ‫عدد األأمرا�ض واألأعرا�ض‪ .‬ويف األأ�سفل‪ ،‬مثال ّ‬ ‫'‪symptom_mapping_file='symptom_mapping_v2.json‬‬ ‫‪with open(symptom_mapping_file) as f:‬‬ ‫)‪mapping=json.load(f‬‬ ‫))‪print(json.dumps(mapping, indent=2‬‬ ‫‪"headache",‬‬ ‫‪"tiredness",‬‬ ‫‪"stuffy nose",‬‬ ‫‪"sneezing",‬‬ ‫‪"sore throat",‬‬ ‫‪"cough",‬‬ ‫"‪"runny nose‬‬ ‫‪],‬‬ ‫[ ‪"allergies":‬‬ ‫‪"headache",‬‬ ‫‪"tiredness",‬‬ ‫‪"stuffy nose",‬‬ ‫‪"sneezing",‬‬ ‫‪"cough",‬‬ ‫"‪"runny nose‬‬ ‫]‬ ‫}‬ ‫}‬ ‫{ ‪"diseases":‬‬ ‫[ ‪"covid19":‬‬ ‫‪"fever",‬‬ ‫‪"headache",‬‬ ‫‪"tiredness",‬‬ ‫‪"sore throat",‬‬ ‫"‪"cough‬‬ ‫‪],‬‬ ‫[ ‪"common cold":‬‬ ‫‪"stuffy nose",‬‬ ‫‪"runny nose",‬‬ ‫‪"sneezing",‬‬ ‫‪"sore throat",‬‬ ‫"‪"cough‬‬ ‫‪],‬‬ ‫[ ‪"flu":‬‬ ‫‪"fever",‬‬ ‫قاع��دة املعرِ ف��ة اجلدي��دة ه��ذه �أك�ربر قلي� ًاًلا م��ن �س��ابقتها‪ .‬وم��ع ذل��ك‪ ،‬يتَّ�ض��ح �أن حماول��ة �إن�ش��اء‬ ‫عب��ارات ‪ IF‬ال�شَ ��رطيَّة يف ه��ذه احلال��ة �س��تكون �أ�صعب بكثري‪ .‬على �س��بيل املث��ال‪ ،‬ت�ضمنت قاعدة‬ ‫املعرِ ف��ة ال�س��ابقة رب��ط �أح��د األأمرا���ض ب�أربعة �أعرا�ض‪ ،‬ومر�ضني بثالث��ة �أعرا�ض‪ .‬وعند تطبيق‬ ‫قاع��دة ثالث��ة �أعرا���ض عل��ى األأق��ل املُط َّبق��ة يف اإلإ�ص��دار األأول‪ ،‬حت�ص��ل عل��ى ‪ 6‬جمموع��ات‬ ‫ثالثي��ة م��ن األأعرا���ض املحتمل��ة الت��ي ت�ؤخَ ��ذ يف االعتب��ار‪ .‬يف قاع��دة املعرِ ف��ة اجلدي��دة باألأعل��ى‪،‬‬ ‫تك��ون لألأمرا���ض األأربع��ة ‪ 5‬و‪ 5‬و‪ 8‬و‪� 6‬أعرا���ض‪ ،‬عل��ى الت��وايل‪ .‬وبه��ذا‪ ،‬حت�ص��ل عل��ى ‪96‬‬ ‫جمموع��ة ثالثي��ة م��ن األأعرا���ض املحتمل��ة‪ .‬ويف ح��ال التعامل م��ع مئات �أو حت��ى �آالف األأمرا�ض‪،‬‬ ‫�ستج ُد �أنّه من امل�ستحيل �إن�شاء نظام مثل املوجود يف اإلإ�صدار األأول‪.‬‬ ‫وكذل��ك‪ ،‬ال يوج��د �س��بب طب��ي وجي��ه ل ِق َ�ص��ر الت�ش��خي�ص الطب��ي عل��ى جمموع��ات ثالثي��ة م��ن‬ ‫األأعرا�

Use Quizgecko on...
Browser
Browser