الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دعوة جدية للنقاش, فلدي جملة تساؤلات أتمنى أن أجد من يناقشني بها

بدأه مبتدئ ومحب في 19 يوليو 2010 · 15 رد · 3,185 مشاهدة · في الذكاء الاصطناعي وتطبيقاته
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته,

درست الذكاء الأصطناعي والأمور التي نجح فيها والأمور التي أخفق فيها

ودرست الشبكات العصبية والخوارزميات الجينية وأخيرا البرمجة الجينية,,

وما يؤسفني هو مشكلة مهمة لا أعرف أذا كانت ذات المشكلة مع باقي الأخوة أم معي فقط؟؟؟؟؟؟؟؟؟

وهي أني نضريا متمكن تقريبا من هذه المواد لكن عمليا لست على شيء!

علما أني أذكر أن برمجتي بلغة البرولوك رائعة لكن يبقى هذا التساؤل مهم..

على كل حال.. فكرت أن أبدأ عمليا من الصفر وأتمنى أن أجد من يناقشني أو يتجاوب مع موضوعي هذا!!

فرضت أن لدي لغز صغير

# + # + # = 15

# + # + # = 15

# + # + # = 15

وهي من الأمور البدائية ومعروفة على ما أعتقد بأن الأرقام من واحد الى تسعة تكون في مكانات المربعات ليكون الناتج 15

وحاولت كتابة برنامج يحتوي على مصفوفة ثنائية 3 * 3 لحل هذا اللغز

وقلت في نفسي يجب أن ابدأ من الطرق التقليدية وهي المحاولة والخطأ الى أن أصل الى النتائج المطلوبة!

لم أستطع أن أجد أستيراتيجة لتغيير الأرقام بين مواقع المصفوفة!

فحاولت تجريب مؤشرين من البداية الى النهاية والأول ينتقل الى الثاني عند تجريب كل الأرقام الى النهاية وهكذا الى نهاية كل الأرقام؟

لكن هل هذا يظمن تغيير كل الأرقام والوصول الى كل النتائج؟!

لكني فضلت أن أفرض أرقاما عشوائية غير متكررة للوصول الى النتائج والحمد لله تم هذاا!

كان الحل بعد محاولات تتراوح عددها من 250 الى 750

ويبقى السؤال المؤلم!

أذا أردت أن أطبق هذا عمليا فكيف أصل الى أستيراتيجة تظمن تغيير كل الأرقام!

وأذا أردت حل هذا بأسلوب الذكاء الأصطناعي أو غير ذلك لكن بنفس البرمجة التقليدية! من أين ابدأ!

على كل حال أعتذر على الأطالة وفي المرفق برنامجي التقليدي وهو بلغة الباسكال..

تحياتي وسلامي لجميع الأعضاء

RND_TRY & ERR.rar

#2

السلام عليكم

هذه مشاركتي الأولى في المنتدى وادعو الله ان يوفقني بأن أكون عضوا فعالا ومفيدا

اولا:-انا لا اعرف لغةالباسكال اذا كنت تعلم لغة اخرى مثل c++ او c# فدعنا نعمل عليه او ارسل لي مرجعا سريعا ورابط لمترجم للغة الباسكال او من الممكن ان نستمر في تناقل الافكار وانت تقوم بالتجربة واخباري بالنتائج

ثانيا لماذا لم تستخدم لغة البرولوج

ثالثا: النتائج فيها خطأ في أرقام مكررة

.................................

الفكرة ان يكون هناك

هناك 3 أعداد مكونة من خانة واحدة يجب أن يكون مجموعها 15

يجب ان يقوم البرنامج بتغير الخانة الاولى ويضع فيها رقم 1 ومن ثم يملأ الخانة الثانية ويضع فيها الرقم 1 ويقوم بجمعهم فاذا كان المجموع اكبر من 15 فينهي هذه الدورة كاملتا ومن دون أن يجرب الخانة الثالثة لماذا؟لأن البرنامج يجب ان يحتوي على ذكاء اصطناعي وهذا ينافي عملية ان يجرب كل الأرقام

تم تعديل هذه المشاركة بواسطة امين صرصور في 19 يوليو 2010 في 16:51

#3

وعليكم السلام ورحمة الله وبركاته

الحقيقة ليس لدي خلفية عن الذكاء الاصطناعي ، لكن فكرة تبديل الأرقام لحل هذا المثال بسيطة عن طريق الحلقات المتداخلة خصوصاً مادمنا نتحدث عن 9 أرقام فقط :)

المثال مكتوب بلغة C# وتجده في المرفقات .

كان عدد الاحتمالات 2592 طبعا مع وجود التكرار :)

أقصد بالتكرار أن البرنامج لا يفرق بين 9 + 4 + 2 و 4 + 9 + 2

طبعا إن أردنا استبعاد النتائج المكررة فيجب علينا التخزين ( مثلا في قاعدة بيانات للتجربة ) ثم التأكد قبل إضافة أي نتيجة .

لك أجمل تحية

Sample.cs

1
#4

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Make array contine our number
int []number1={1,2,3,4,5,6,7,8,9};

//جمل تكراار متاخلة
//من أجل العدد الأول
for(int i1=0;i1<number1.Length;i1++)
{
//من أجل العدد الثاني
for (int i2 = 0; i2 < number1.Length; i2++)
{
//في حالة كان العداد متساويان او مجموعهما اكبر او يساوي 15 فيتوقف عن فخص العدد الثالث
if (number1[i2] == number1[i1] || number1[i2] + number1[i1] >= 15)
continue; //ينهي الدورة الحالية ولا يستمر في فحص العدد الثالث
//من أجل العدد العدد الثالث
for (int i3 = 0; i3 < number1.Length; i3++)
{
//اذا كان العدد الثالث مساوي للأول او الثاني او كان مجموعهاما لا يساوي 15 ستوقف
if (number1[i3] == number1[i1] || number1[i3] == number1[i2] || number1[i2] + number1[i1] + number1[i3] != 15) continue;
//سيأتي المؤسر الى هنا فقط في الحالة الصحيحية
Console.WriteLine(number1[i1] + "+" + number1[i2] + "+" + number1[i3] + "=15");

}

}


}


}

//Console.WriteLine(t);


}
}

Program.cs

#5

السلام عليكم ورحمة الله وبركاته..

شكرا للجميع على المرور والتفاعل الكريم..

الاخ hfsh80

فكرتك رائعة جدا,, وأسلوبك البرمجي جميل جدا, لك تحياتي وسلامي الكبير

وبرنامجك يوصلني الى فهم كامل لحل أستيراتيجة تغيير الأرقام,

وما نحتاجه الان هو الأستفادة من الذكاء الأصطناعي للوصول الى النتائج.

الاخ الكريم امين صرصور

وعليكم السلام..

أولا: أنا مبرمج لغة سي++ لكني غير محترف بها أما الباسكال فهي لغة غير محببة بالنسبة للأعضاء على ما أعتقد.

لذلك سأكتفي بشرح فكرة برنامجي التقليدي البسيط

برنامجي يحتوي على دالة تملئ هذه المصفوفة بأرقام عشوائية وفي كل مرة تستدعي دالة أخرى للتأكد من أن الرقم غير مكرر!

وبعد ذلك تستدعي دالة للتأكد من النتائج فأذا كانت صحيحة تم طباعتها وغير ذلك يكرر العمل!

برنامج يعتمد على الحظ في أختيار الأرقام العشوائية أما برنامج الأخ hfsh80 فهو يظمن أستخدام كل الأرقام..

ثانيا: أستطيع كتابة البرنامج بلغة برولوج لكن هدفي ليس حل اللغز وأنما فهم كامل لمشكلة بسيطه كهذه ثم الأستفادة من التقتيات الحديثة كالذكاء الأصطناعي أو البرمجة الجينية لحلها..

ثالثا كلامك صحيح حول الذكاء وطريقتك رائعة وأستطيع الزيادة على تلك الفكرة بأنه أذا كان مجموع الرقمين أصغر من 6 يخرج أيظا لأنه حتى لو كان الثالث 9 فلا يصل الناتج الى 15

وبعد هذا أقول وصلنا الى نتائج أيجابية جدا لكن هل هذه أفضل الطرق؟ وهل نستطيع القول بأننا أستعملنا تقنيات الذكاء الأصطناعي أم أستخدمنا جزء منه؟؟

ثم هل نستطيع تطوير الحل للوصول الى مبتغى وهدف الذكاء الأصطناعي وهو تقارب عمل الحاسبة للأنسان!؟

وهل نستطيع الأستفادة من التحاسبات التطورية في هذا(البرمجة الجينية والخوارزميات الجينية...الخ)؟؟

تحياتي وسلامي لجميع الأعضاء

ملاحظة: أخي امين صرصور قمت بأعادة كتابة مثالك ومثال الأخ hfsh80 بلغة الباسكال فأذا كان ينفعك فأنه في المرفقات,, ولا أعتقد أن الخلاف كبير عن اللغة التي كتبت فيها..

in pas.rar

#6

السلام عليكم

لعلي انظر للموضوع من جهه اخرى

وهي ان المشكله عباره عن Constrained problem

فانت تحتاج الى وصف المشكله بدلا من ايجاد الخطوات لحلها ..

بمعنى انك تريد ان تصف المشكله للكمبيوتر وتجعله هو ياتي بالنتائج constraint programming

تمثيل المشكله سيكون عن طريق Constraint Satisfaction Problems CSPs

الCSP هي مكونه من {X,D,C}

X هي المتغيرات في المشكله لنفترض انها V1,.......,V9

D هي الدومين لكل متغير {D={1,2,3,4,5,6,7,8,9

C هي القيود على المتغيرات :

V1+V2+V3=15

V4+V5+V6=15

V7+V8+V9=15

الان الحل هو ان تعطي قيمه لكل هذه المتغيرات بدون ان تتجاوز اي قيد ..

#7
اقتباس
تمثيل المشكله سيكون عن طريق Constraint Satisfaction Problems CSPs

+1

مشكلة كهذه لا أرى معنى لحلها " بالتخمين " وكم " loop " .. لم نستفد شيء مما درسناها اذا فكرنا بنفس الطريقة التي فكر بها الاخوة هنا باستثناء تفكير عيسى .

لو كان عدد المتغيرات 100 مثلاً ، فمن الصعب أن نستمر بنفس الحلول التجريبية المطروحة ..

لكن الاخ عيسى طرح جزء من الحل وهو تمثيل المشكلة كـ CSP، وبقي الجزء الآخر ، وهي خوارزمية البحث التي يجب استخدامها ، وكيف ؟

لا أعرف هل الـimplementation لهذه المشكلة سهل ؟ سواءً تمثيل CSP في الحاسوب أو كتابة خوارزمية البحث مثل backtracking ؟

ماذا عن حل المشكلة باستخدام خوارزمية بحث بسيطة مثل DFS ؟

بما أننا نبحث عن 9 أعداد ، فيمكن توليد عدة احتمالات عن طريق عدة مستويات .. كل مستوى يحوي أكثر من Node ، كل Node سيكون :

V1+V2+V3=15 
V4+V5+V6=15
V7+V8+V9=15

ولكن شجرة البحث ستكون ضخمة !

لذلك ، معضلتي هي بأني لم أقم بتجربة CSP على أرض الواقع ، ولا اذكر كيف ستكون شجرة البحث أبسط ؟ هل ستكون أبسط بمجرد حذف بعض المتغيرات التي تعيق الشرط ؟ لا أعرف ..

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

وعليكم السلام..

أخواني الأعزاء,, هذا ما أريد الوصول له.

بالفعل حل هذه المشكلة بالطرق الاولى التي ذكرت ليس هو محل أهتمامي,, فأنا عندما طرحت المشكلة كان لي هدف أساسي وهو تطبيق ما تعلمته بمجالات الذكاء عمليا,,

فأنا برغم دراستي لمجالات الذكاء الأصطناعي الا أنني للأسف لم أستفد من ذلك عمليا,,

وحتى كلامكم الذي أستطيع أن أفهمه نضريا أجده صعب التطبيق عمليا!

وبصراحة لدي أفكار لبرامج قوية جدا.. لا أعتقد أني أستطيع تطبيقها مالم أستخدم هذه التقنيات التي يجب أن أفهمها بشكل جيد..

بالنسبة لشجرة البحث فهي كبيرة كما قال الاخ الشمري..

اعتقد انه من الافضل طرح مشكلة اصغر ومحاولة حلها..!

لاني أتمنى أن أجد التفاعل وأتمنى أن أستطيع تطبيق تقنيات الذكاء لحل مشكلة بسيطة!

حتى تكون مثال لي ولأخواني المبتدئين.. وأريد أن أحل المشكلة بتقنيات أخرى كالبرمجة الجينية فيما بعد..

لذا أعتقد أني اخطأت الاختيار لهذه المشكلة وكان علي طرح مشكلة أكثر بساطة ولو أن مشاكل كهذه كثيرة وأن هذه المشكلة لاشيء بالنسبة للمشاكل المعقدة الحقيقية,

فمثلا لو كانت لدينا المشكلة الأتية والتي وضعت حلها في المرفقات بالطرق التقليدية بعيدا عن الذكاء الاصطناعي وهي

#

#15#

#14#19#

#21#

#

والتي يكون مجموع كل 4 ارقام مساوي للرقم الذي يقع في المنتصف

والتي لها 6 حلول فقط!!!

أو نفس المشكلة الاولى لكن مجموع الارقام العمودية والافقية 15 ولها 8 حلول فقط

وهذا أذا ما قارناه بطرحي للمشكلة الاولى نجد فرقا كبيرا!

فالمشكلة الاولى يزيد حلولها عن 200 حل!!

على كل حال تحياتي وسلامي للجميع

bazel.pas

#9

السلام عليكم

اخوي عبدالله طرح اسئله ونقاط جداً مهمه وحيويه لفهم المساله ..

اقتباس
لو كان عدد المتغيرات 100 مثلاً ، فمن الصعب أن نستمر بنفس الحلول التجريبية المطروحة ..

ليس هذا فقط بل انت عندما تظل تفكر بالنمط البرمجي التقليدي imperative ستجد انك في دوامه لاتنتهي

وان كل مشكله تحتاج الى اعاده كتابه الكود الخاص فيها domain-specific

فالحل هو باستخدام ال declarativ paradigm

نعم فلحل مشكله CSP عدد متغيراتها 100 والدومين سايز 9 نحتاج الى 9 اس 100 وقت لحل هذه المشكله exponential time

وهذه مشكله عامه في ال CSPs انها NP-complete ..

اقتباس
كن الاخ عيسى طرح جزء من الحل وهو تمثيل المشكلة كـ CSP، وبقي الجزء الآخر ، وهي خوارزمية البحث التي يجب استخدامها ، وكيف ؟

هناك كثير من الخوارزميات التي يمكنك استخدامها ..وتحديد ماهي الخوارزميه الانسب تعتمد على الcomplexity للمشكله الحاليه ..

هناك انواع من الخوارزميات التي لاتضمن لك الحصول على كافه الحلول incomplete مثل Generate and Test GT and Stochastic local Search لكن تضل ميزتها انك قد تحصل على حل سريع efficient

كذلك انواع اخرى تضمن لك الحصول على حل ان وجد systematic search مثل Forward Checking ,Backtracking ,Dynamic backtracking

كذلك يمكنك عمل Constraint Propagation لضمان ال consistency وال local consistency للمشكله وهذا قد يخدمك احياناً بشكل كبير في المشكله ..

اقتباس

لا أعرف هل الـimplementation لهذه المشكلة سهل ؟ سواءً تمثيل CSP في الحاسوب أو كتابة خوارزمية البحث مثل backtracking ؟

ماذا عن حل المشكلة باستخدام خوارزمية بحث بسيطة مثل DFS ؟

الimplementation والتمثيل ليس بالصعب في حاله وجود مكتبه library مبنيه لهذا النوع من المشاكل...هناك constraint solvers كثيره مثلاً بالجافا يوحد Choco

كثير من مشاكل الCSP تستطيع حلها بال DFS

الBacktracking هو DFS بالاصل وله n level (في حاله عندنا n متغير ) ..

http://www.academic.marist.edu/~jzbv/algorithms/Backtracking.htm

تم تعديل هذه المشاركة بواسطة Eisa Ayed في 25 يوليو 2010 في 20:19

#10

السلام عليكم

اخي مبتدى ومحب ,

اتفق معك تماما في مساله انك لاتراها بالواقع كثيراً لكن يمكنك تطبيقها ..

انت تعرف اننا نتكلم عن نوع من المشاكل الامر الفصل فيها هو ال computation complexity اي بمعنى اننا لسنا قاصرين عن معرفه هل هناك حل ام لا

ولكننا لانعلم متى نجد هذا الحل قد ياخذ اقل من ثانيه او ياخذ سنه ..

خذ على سبيل المثال N-queens problem وهي من ابسط المشاكل

وببساطه هي انه عندك n-queens ويوجد n*n مربع

عليك بوضع كل كوين في مربع بحيث انه :

1- لايوجد 2 كوين على نفس الصف

2- لايوجد 2 كوين على نفس العمود

3- لايوجد 2 كوين على نفس القطر

فلو مثلناها ستكون كالتالي :

X=Q1,Q2,Q3,Q4

D={1,2,3,4 رقم الصف

C الشروط التي بالاعلى

هذا احد الحلول لل 4-queeens

  Q1 |  Q2   | Q3   |   Q4 
-----------------------------
 ----|   X   | -----| ----- 
----------------------------- 
 ----| ----- | -----|   X  
----------------------------- 
  X  | ----- | -----|  -----
-----------------------------
 ----| ----- |   X  |  -----
-----------------------------

فالحل هو {Q1=2,Q2=4,Q3=1,Q4=3}

عندما يكون عندك 4 queens لايوجد الا حلين للمساله

لكن عندما يوجد عندك 11 queens يوجد حوالي 2600 حل

و 12 queen لها اكثر من 14000 حل !

فالsearch space يكبر بشكل مو طبيعي و يمكنك تجربتها ووضع n=30 مثلاً وسترى انها تاخذ وقت طوووويل و ممكن يسوي كراش للسستم .

المقصد من الموضوع اننا قادرين على الفهم والتطبيق ولكن دائما نحتاج الى اكسس ل computing power عاليه لحل هذه الانواع من المشاكل

كذلك الفهم الصحيح والعميق للمشكله يمكنك من تقليل حجم space search بشكل مهول

مثلاً في الN-queens يمكنك تمثل كل queen بطريقتين

(i,j)

i=row number

j=column number

او بطريقه ان تضع كل كوين على عمود وتحرك الصفوف (من مسلمه ان كل كوين لابد ان تكون بعمود مختلف ) وبهذا تكون قللت من الsearch space بشكل كبير (بحكم انك ستتخلص من ال redundancy في الاعمده لمختلف الكوينز ) ..

لهذا النوع من المشاكل يمكنك بناء Library لحل اي مشكله Constrained وانا حقيقه مشروعي في الماجستير هو ان اطور Library لحل هذا النوع من المشاكل بالاضافه الى مشاكل الsoft constraints ..

تم تعديل هذه المشاركة بواسطة الشمري في 25 يوليو 2010 في 22:57 — السبب: تنسيق جدول الحل ..

#11

يعطيك العافية ، شرحك واضح ..

مكتبة Choco يبدو جميلة .. قرأت manual ، وتبدو فعلاً مفيدة ..

اقتباس
اعتقد انه من الافضل طرح مشكلة اصغر ومحاولة حلها..!

لاداعي لطرح مسألة جديدة ، فأهم شيء فكرة الحل .

مشكلة magic square ممتازة لتبدأ منها .. لذلك استمر عليها ..

http://www.emn.fr/z-info/choco-solver/tex/choco-tut.pdf

هذا manual للمكتبة التي اقترحها الاخ عيسى .. تحوي على درس لكيفية حل مشكلة magic square عن طريق CSP باستخدام المكتبة ..

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#12

لا أعرف كيف أشكركم,,

سأبحث في هذا الموضوع بجدية وأنا متأكد من أنني سأصل الى نتائج وأخبركم حينها,,

تحياتي وسلامي للأخ عيسى والاخ الشمري وللجميع بلا أستثناء

#13

كلنا مهتمين بنتائج المناقشة

#14
امين صرصور كتب:

كلنا مهتمين بنتائج المناقشة

لك اجمل تحية اخي الكريم لاني وبصراحة افتقدتك.. سلامي لك

#15

عندي معلومات نظرية ولهذا اردت الافادة قدر المستطاع والان اصبح الموضوع شيق جدا لذلك ارجو المتابعة

وشكرا

#16
امين صرصور كتب:

عندي معلومات نظرية ولهذا اردت الافادة قدر المستطاع والان اصبح الموضوع شيق جدا لذلك ارجو المتابعة

وشكرا

بالفعل أخي الكريم.. لكني للأسف منشغل هذه الأيام جدا, لكني أن شاء الله سأعود الى البحث بهذا الأمر حالما أتم أعمالي,,

لك تحياتي وسلامي

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…