رفتن به مطلب

تكنيك ها وزبانهاي برنامه نويسي هوش مصنوعي


Reyhane

ارسال های توصیه شده

تكنيك ها وزبانهاي برنامه نويسي هوش مصنوعي

مقدمه

 

تكنيك ها وزبانهاي برنامه نويسي هوش مصنوعي

 

 

ما در عصري زندگي مي كنيم كه جامعه شناسان آن را عصر انقلاب كامپيوتر نام نهاده اند و مانند هر انقلاب واقعي ديگر، انقلابي است گسترده و فراگير و تأثير پايداري برجامعه خواهد داشت.

 

اين انقلاب در اقتصاد امروز و نظم جامعه، به همان ميزان انقلاب صنعتي در قرن 19 تأثير دارداين تحولات قادر است الگوي فكري و فرم زندگي هر فرد را تغيير دهد.

 

انقلاب كامپيوتر توان ذهني ما را گسترش مي دهد.

 

عملكرد اولية برنامه نويسي هوش مصنوعي (AI) ايجاد ساختار كنترلي مورد لزوم براي محاسبه سمبوليك است خصوصيات اين ساختارها به مقدار زيادي موجب تشخيص خصوصياتي مي شود كه يك زبان كاربردي مي بايستي فراهم كند.

 

در اين مقدمه به يك سري خصوصيات مورد نظر براي زبان برنامه نويسي سمبوليك مي پردازيم و زبانهاي برنامه نويسي LISP و PROLOG را معرفي خواهيم كرد.

 

اين دو زبان علاوه بر اين كه از مهمترين زبانهاي مورد استفاده در هوش مصنوعي هستند، خصوصيات semantic و syntactic آنها نيز باعث شده كه آنها شيوه ها و راه حل هاي قوي براي حل مسئله ارئه كنند.

 

تأثير قابل توجه اين زبانها بر روي توسعه AI از جمله توانائي آنها به عنوان «ابزارهاي فكر كردن» مي باشد كه از جمله نقاط قوت آنها در زبانهاي برنامه نويسي مي باشد.

 

همان طور كه هوش مصنوعي مراحل رشد خود را طي مي كند زبانهاي LISP و PROLOG بيشتر مطرح مي شوند.

 

اين زبانها كار خود را در محدودة توسعه و prototype سازي سيستم هاي AI در صنعت و دانشگاهها دنبال مي كنند.

 

اطلاعات در مورد اين زبانها به عنوان بخشي از مهارت هر برنامه نويس AI مي باشد ما به بررسي اين دو زبان در هوش مصنوعي مي پردازيم.

 

آنــــچه را كـــه نمي دانيم موجب دردسر و گرفتاري ما نخواهد شد، بلكه دردسرها از دانسته ها سرچشمه مي گيرند.

 

W.ROGERS

 

 

 

 

زبان ، شناخت و خلاصه پردازي

 

توانايي شكل گيري خلاصه برداري از تجربيات از توانمند ترين و اساسي ترين توانائي هاي ذهن انسان است خلاصه پردازي به ما اين اجازه را مي دهد كه به فهم جزئيات از يك محدوده ي كلي اطلاعات مربوط به يك خصوصيت كلي سازمان و رفتار برسيم . اين خلاصه ها به ما اجازه شناخت و درك كامل موارد دريافت شده در حوزه خاص را مي دهند . اگر ما وارد يك خانه شويم كه به خوبي ساخته شده باشد ، راههاي خود را به اطراف پيدا خواهيم كرد . ساختار خصوصيات اطاق نشيمن ، اطاق خواب ،‌آشپزخانه و حمام عموماً از ويژگيهاي يك مدل خانة استاندارد مي باشد .

 

خلاصه پردازي به ما حس شناخت خانه هاي متفاوت را مي دهد . يك تصوير ممكن است بياني قوي تر از هزاران كلمه داشته باشد ، اما يك خلاصه مشخصاً بيان كنندة خصوصيات مهم يك كليت از نوع تصوير است .

 

وقتي كه ما به تئوري براي توصيف كلاس هاي يك پديده مي پردازيم ، خصوصيات و ويژگيهاي كمي و كيفي مربوط به كلاس از كل جزئيات خلاصه مي شود .

 

كه اعضاء به خصوص خود را مشخص مي كند . اين كاهش جزئيات به وسيله قدرت توصيف و پيش بيني يك نظريه ارزشمند جبران مي شود .

 

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

 

خلاصه پردازي طبقه بندي شده (سلسله مراتبي ) :

 

ساختار و سازمان آزمايش و تجربه در ارتباط با توصيفات كلاس هاي خلاصه سازي يكي از ابزارهاي شناخت رفتار و ساختار سيستم هاي مركب است كه شامل برنامه هاي كامپيوتر مي شوند .

 

همانند رفتار يك حيوان كه ممكن است بدون توجه به فيزيولوژي سيستم عصبي نهفته در پشت آن مورد مطالعه قرار گيرد .

 

يك الگوريتم داراي خصوصيات مربوط به خود مي باشد كه كاملاً آن را از برنامه اي كه آن را به كار مي برد جدا مي سازد .

 

به عنوان مثال دو نوع كاربر متفاوت جستجوي باينري را در نظر بگيريد .

 

يكي از آنها يعني Fortran از محاسبات و طبقه بندي استفاده مي كند و ديگري يعني Ctt از Pointer استفاده مي كند كه بتواند در جستجوي درون شاخه هاي binary كاربرد داشته باشد .

 

اگر دقيق تر نگاه كنيم اين برنامه ها مثل هم مي باشند چون اگر جز اين باشد كاربردهاي آنها نيز تفاوت خواهد شد . جداسازي الگوريتم از كه مورد استفاده در كاربرد آن يكي از نمونه هاي خلاصه سازي سلسله مراتبي مي باشد .

 

Allen New ell بين سطح دانش و سطح نشانه ها براي توصيف يك سيستم هوشمند تفاوت قائل شده است.

 

سطح نشانه ها همراه سازماندهي به خصوصي مورد توجه قرار گرفته كه براي بيان اطلاعات حل مسئله مورد استفاده قرار مي گيرد. بحث مربوط به توجه به منطق به عنوان يك زبان يك نمونه از مواردي است كه به سطح نشانه پرداخته است.

 

علاوه بر سطح نشانه سطح دانش است كه توجه آن به مقدار و محتوي اطلاعات يك برنامه و شيوه استفاده از آن اطلاعات مي باشد.

 

اين نوع تمايز در ساختار و معماري سيستم هايي كه بر اساس دانش و اطلاعات و سبك توسعه اي كه آن را پشتيباني مي كتد منعكس مي گردد.

 

به دليل اينكه كاربرها برنامه ها را در قالب دانش و توانايي خودشان مي شناسند بنابراين حائز اهميت است كه برنامه هاي AI داراي يك سطح خصوصيات اطلاعاتي باشند.

 

جداسازي اصل دانش و اطلاعات از ساختار كنترل اين نظريه را آشكار مي سازد و توسعه رفتار سطح دانش را ساده مي سازد.

 

همانند اين نيز سطح نشانه اي يك زبان توصيفي را تشريح مي كند كه شبيه قوانين و روشهاي توليد يا منطق براساس دانش و اطلاعات مي باشد.

 

جداسازي آن از سطح و دانش و اطلاعات نه برنامه نويس اين اجازه را مي دهد كه به سمت خلاصه پردازي ت،ثير پذيري و راحتي برنامه نويسي سوق پيدا كندكه در ارتباط با رفتار و عملكرد بالاي برنامه نمي باشد.

 

كاربرد بيان سطح نشانه اي شامل يك سطح دوره پائين تر از ساختار برنامه مي شود و بيانگر يك سري ملاحظات طراحي اضافي مي شود.

 

اهميت نظريه چند مرحله اي نسبت به طراحي سيستم نمي تواند بيش از اين مورد توجه قراار گيرد.

 

يعني اينكه به برنامه نويس اجازه مي دهد كه با پيچيدگي نهفته شده در سطوح پائين تر خود را درگير نكند و توجه و تاكيدش بر روي منابع مناسب با سطح فعلي خلاصه پردازي كند.

 

همچنين موجب مي شود كه اصول تئوري هوش مصنوعي عاري از كاربردهاي خاص يا زبان برنامه نويسي باشد . اين همچنين به ما قدرت توصيف يك كاربرد را مي دهد و تاثير گذاري خود را بر روي ماشين ديگر اثبات مي كند بدون اينكه بر رفتارش در سطوح بالاتر تاثير بگذارد .

 

 

 

 

سطح اطلاعات توصيف كننده توانائي هاي يك سيستم هوشمند است. محتوي دانش و اطلاعات مستقل از شكل پذيري مورد استفاده براي بيان آن است به همان اندازه كه زبان بيان كاملا مؤثر مي باشد .

 

توجه به سطح دانش شامل سؤالاتي از اين قبيل است:

 

از اين سيستم چه چيزي ساخته خواهد شد؟ چه اشيا و چه ارتباطي در آن محدوده مؤثر و مفيد است ؟ چگونه يك اطلاعات جديد به سيستم اضافه مي گردد؟

 

آيا واقعيات در طي زمان تغيير مي كنند؟ چگونه و چطور سيستم نيازمند است كه دلائل اطلاعات خود را ثابت كند؟ آيا محدوده ارتباطي داراي يك طبقه بندي درست و شناخته شده است؟

 

آيا اين محدوده شامل يك سري اطلاعات نادرست و غير ممكن است؟

 

تجزيه و تحليل دقيق در اين سطح يك گام مبهم در طراحي كلي ساختار يك برنامه مي باشد.

 

در سطح نشانه تصميمات درباره ساختارها صورت مي گيرد كه براي بيان و ايجاد دانش مورد استفادده قرار مي گيرند. انتخاب يك زبان براي بيان يك مورد مربوط به سطح نشانه مي باشد.

 

منطق يكي از چندين نوع اشكال است كه اصولا در حال حاضر براي بيان دانش و اطلاعات در دسترس مي باشد.

 

زبان بيان نه تنها مي بايستي توانايي بيان اطلاعات مورد لزوم براي كاربر را داشته باشد بلكه مي بايستي خلاصه و قابل توصيف و داراي كاربرد مؤثر باشد و مي بايستي به برنامه نويس براي دستيابي و سازماندهي اصل و اساس اطلاعات كمك كند.

 

وقتي كه بين سطح اطلاعات و سطح نشانه يك برنامه تمايز به وجود آمد ما مي توانيم بين سطح نشانه و الگوريتم و ساختمان داده ها مورد استفاده براي كاربرد آن نيز تمايز قايل شويم. به عنوان مثال بدون تاثيرگذاري رفتار و عملكرد يك تحليل گر برنامه كه اساس منطقي داشته باشد مي بايستي تاثير ناپذير از انتخاب بين يك سري جزئيات و يك مجموعه و دسته بايزي باشد تا بتواند يك جدول مربوط به نشانه ها را به كار برد.

 

اين تصميمات كاربردي هستند و مي بايستي در سطح نشانه قابل رؤيت باشند . بسياري از الگوريتم و ساختمان داده ها در كاربرد بيان زبان AI به كار مي روند كه از روشهاي معمول علم كامپيوتر مي باشند مثل شاخه ها و جداول بايزي.

 

ديگر موارد در رابطه با AI بسيار تخصصي هستند و به گونه يك كه مستعار بيان مي شوند كه از طريق متن و بخش هاي مربوط به LISP و PROLOG بيان مي شوند .

 

در سطح پائين تر مربوط به الگوريتم و ساختمان داده ها ( سطح زبان ) واقع شده است در اين جا ست كه زبان كاربردي براي برنامه مشخص مي شود .

 

با اين حال سبك برنامه نويسي مطلوب احتياج به اين دارد كه ما يك خلاصه داده اي بسازيم كه بين خصوصيات ويژه يك زبان برنامه نويسي و لايه هاي بالاي آن قرار گيرد . نيازهاي منحصر به فرد برنامه نويسي سطح نشانه اي تأثير به روي طراحي و استفاده از زبانهاي برنامه نويسي AI ايجاد مي كند . علاوه بر اين طراحي زبان مي بايستي در برگيرنده و مطابق با ساختار آن كه بر گرفته از سطوح پائين تر ساختمان كامپيوتر كه شامل زبان اسمبلي و سيستم عامل و دستور العملهاي ماشين و سطوح سخت افزار ي باشد .

 

و محدوديت هاي فيزيكي كامپيوتر مي بايستي بر روي منابعي همچون حافظه و سرعت پردازشگر تأ كيد كند . روش هاي PROLOG , LISP در جهت مستعاذل كردن نيازهاي سطح نشانه و نيازهاي نهفته در ساختار هر دو منبع مورد استفاده مي باشند و هم چنين يك هدف هوشمند و ذهني با اهميت مي باشند . در دنباله ما از ساختارهاي سطح اطلاعات در محيطهاي برنامه نويسي بر روي يك زبان كاربردي صحبت خواهيم كرد و سپس به مصزفي زبانهاي عمده AI يعني PROLOG , LISP مي پردازيم .

 

خصوصيات مطلوب يك زبان AI

 

يكي از خصوصيات و ويژگيهاي مهم خلاصه سازي سلسله مراتبي در ساختار برنامه غير حساس بودن سطوح بالاتر نهفته در كاربرد زبان مي باشد .

 

اين مشاهده در عمل سنجيده مي شود كه همراه با سيستم هاي موفق دانش مدار مي باشد كه در زبانهاي برنامه نويسي مختلفي مثل Pascal , C , Ctt , Java , PROLOG , LISP و حتي Fortran به كار مي رود .

 

برنامه هاي مختلفي اصولاً در PROLOG , LISP و سپس در C به كار گرفته مي شوند تا بتواند تاثيرپذيري و انتقال پذيري بهتر ايجاد كنند. در هر دوي اين موارد رفتار و عملكرد در سطح نشانه به طور قطع بي اثر مي باشد.

 

با اين حال محدوديتهاي خلاصه سازي در يك برنامه جامع بيان مي شود كه كامل نمي باشد . ساختار سطح بالاتر باعث ايجاد ساختارهاي قوي بر روي لايه هاي زيرين مي شود و نياز به اين دارد كه برنامه نويسي AI بر روي سطح نشانه اي قرار گيرد كه در سطح زبان تكرار مي شوند.

 

به عنوان مثال ساختارهاي اطلاعاتي مورد لزوم براي ادغام سمبوليك خود را مقيد به اشكال تكراري مثل فلش ها و ليست ها نمي كنند.

 

اهداف و پيش بيني هاي منطقي ابزارهاي كاربردي طبيعي تر و انعطاف پذيرتر خواهند بود.

 

علاوه بر اين به دليل مشكلات موجود در بسياري از مسائل مربوط به AI اغلب توسعه را قبل از اينكه يك شناخت كامل از نهايت فرم برنامه داشته باشيم شروع مي كنيم.

 

توسعه AI لزوما در طبيعت به صورت كشف و تجزيه و آزمايش است.

 

اين نياز هم چنين وابسته به يك زبان و ابزارهايي است كه بايد فراهم ساخت . يك زبان نه تنها مي بايستي متناسب با كاربرد ساختارهاي سطح بالا باشد بلكه مي بايستي يك ابزار مناسب براي انتقال كل چرخه نرم افزار از آناليز و تجزيه و تحليل تا حصول برنامه باشد.

 

در پنــج زير گـــروه بعدي ما به صورت جزئي و كامل در مورد نيازهايي كه ساختارهاي سطح نشانه اي برنامه هاي AI كه بر روي كاربرد زبان دارند بحث مي كنيم.

 

اين موارد عبارتند از :

 

1. پشتيباني از محاسبه سمبوليك

 

2. انعطاف پذيري كنترل

 

3. پشتيباني از متدولوژي و روش هاي برنامه نويسي جستجويي

 

4. پويايي

 

5. مستنند سازي خوب و واضح

 

`پشتيباني از محاسبات سمبوليك

 

گرچه روش هاي زيادي براي سازماندهي اطلاعات در يك سطح نشانه وجود دارد . ولي تمامي آنها نهايتاً به عنوان عملكردهايي بر روي نشانه ها به كار مي روند .

 

اين روش در تئوري نشانه هاي آقاي Simon , Newell آمده است . تئوري هاي سيستم فيزيكي نشانه نياز اصلي براي زبان برنامه نويسي است كه كاربردهاي يك سري از عمليات سمبوليك را آسان مي كند .

 

حتي شبكه هاي عصبي و ديگر شكل هاي ضروري محاسبه مي بايستي شامل اطلاعات سمبوليك در وروديها و خروجي هايشان باشند . انواع كاربردها و اطلاعات دادهاي عددي تاكيد شان بر روي زبانهاي برنامه نويسي معمول است كه براي كاربردهاي جستجوي الگوريتمي يا بيان زبان AI مناسب نمي باشند.

 

علاوه بر اين يك زبان AI مي بايستي ساختار ايجاد نشانه هاي اوليه را ساده سازد و بر روي آنها كار كند. اين يكي از مهمترين نيازهاي يك زبان برنامه نويسي AI مي باشد.

 

محاسبات و پيش بيني يكي از قوي ترين و عمومي ترين ابزارهاي ايجاد ساختار كيفي يك محدوده از مسئله مي باشد.

 

خصوصيات بارز يك محدوده ممكن است به گونه يك سري واقعيات منطقي بيان شود. از طريق استفاده از متغيرها امكان ايجاد واقعيات كلي درابره ارتباط بين اهداف در يك محدوده به وجود مي آيد.

 

PROLOG يك زبان برنامه نويسي كلي است كه بر اساس پيش بيني محاسباتي است.

 

به عنوان يك كاربرد رسمي منطق PROLOG بعضي اوقات مستقيما به عنوان يك زبان در سطح نشانه مورد استفاده قرار مي گيرد.

 

با اين حال قدرت واقعي آن به عنوان يك زبان براي كاربرد دقيق تر و كامل همانند چهارچوب ها و شبكه ها در يك روش سيستماتيك و فشرده مي باشد بسياري از ساختارهاي سطح نشانه اي به سادگي با استفاده از ساختارهاي سطح بالاي PROLOG ساخته مي شوند.

 

PROLOG ممكن است براي كاربرد در جستجوي الگوريتم ها يك سيستم محافظ و يك شبكه سمانتيكي مورد استفاده قرار گيرد.

 

يك ابزار مهم ديگر براي ساخت ساختارهاي نشانه ليست مي باشد يك ليست شامل يك سري عناصر مي شود كه در آن هر عنصر ممكن است حتي يك ليست و يك نشانه باشد.

 

چند نمونه از ليست ها با استفاده از ساختار برنامه نويسي LISP عبارتند از :

 

(اين يك ليست است)

 

(اين هست) (يك ليست) (از ليست ها)

 

(زمانها (بعلاوه 13)(بعلاوه 23) )

 

((123)(456)(789))

 

توجه داشته باشيم كه اينها نمونه هايي مي باشند كه شامل ليستهاي درون ليست هاي ديگر مي شود اين موجب مي شود كه ارتباطات ساختاري ايجاد گردد. قدرت ليست ها عمدتا در نتيجه توانايي بيان هر نوع ساختار نشانه اي بدون در نظر گرفتن پيچيدگي يا عملكردهايي كه مي بايد از آن پشتيباني كند مي باشد.

 

اين شامل شاخه ها گراف هاي اوليه يك سري مشخصه هاي منطقي جهت ها اصول اطلاعاتي كليدي مي شود. به طور خلاصه هر نوع ساختار ممكن است بر اساس يك تركيب مناسب متشكل از ليست ها و عملكردهاي واقع شده بر روي آنها حاصل شوند.

 

ليست ها يك سري بلوك هاي مهم مي باشند كه PROLOG , LASP كه موجب مي شود كه كاربر را با عناصر اطلاعاتي و عملياتي براي دستيابي و تاكيد بر آنها در درون يك سري ساختارهاي پيچيده مهيا سازد. در حاليكه PROLOG مستقيما به محاسبات پيش بيني شده وابسته است و شامل يك سري ليست به عنوان ابزارهاي بيان مي شود.

 

LISP ليست را به عنوان اصول انواع داده ها و برنامه ها مورد استفاده قرار مي دهد. تمامي ساختارهاي LISP از ليست ها ساخته مي شوند و زبان فراهم كردن يك سري ابزارهاي قوي براي تركيب اينها (ساختارها) را به عهده دارد و توصيف كننده عمليات جديد براي ايجاد توسعه و تغيير آنها است. يك شكل كردن ساختار LISP و توانائي توسعه آن توصيف هر نوع زباني را براي ساختار آن ساده مي سازد . بوسيله پرداختن به نظريه جمع آوري اطلاعات فشرده برنامه نويس LISP مي تواند ساختارهاي نشانه را توصيف كند و عمليات مورد نياز هر نوع شكل گيري سطح بالا شامل كنترل كننده هاي جستجو حل كننده هاي تئوريهاي منطقي و ديگر اظهارات سطح بالا مي باشد.

 

 

 

انعطاف پذير بودن كنترل:

 

يكي از مشخصه هاي اساسي رفتار هوشمند قابليت انعطاف پذيري آن مي باشد . در حقيقت مشكل بتوان تصور كرد كه هوشمندي مي تواند از طريق توسعه گام به گام مراحل ثابت كه بوسيله برنامه هاي معمول كامپيوتري نشان داده مي شود حاصل شود. خوشبختانه اين تنها راه سازماندهي محاسبات نمي باشد.

 

يكي از مهمترين و در عين حال قديمي ترين نمونه هاي مربوط به ساخت يك برنامه AI سيستم توليد مي باشد.

 

در سيستم توليدي برنامه شامل يك سري قوانين مي شود. در منطق اطلاعات اين قوانين به گونه اي تنظيم مي شود كه بوسيله الگوي اطلاعات در يك نوع مسئله داده شده قابل تشخيص باشد.

 

قوانين توليد مي تواند به هر گونه كه پاسخگوي آ“ موقعيت خاص باشد برنامه ريزي شود. بدين طريق يك سيستم تولسد مي تواند ايجاد كننده انعطاف پذيري و ارتباط لازم براي رفتار هوشمند باشد.

 

بنــــابراين AI از يك تعداد متفاوتي ساختارهاي كنترلي استفاده مي كند كه بسياري از انها مرتبط با سيستم هاي توليد مي باشند و همه آنها تابع الگو مي باشند . كنترل الگويي موجب مي شود كه اطلاعات با توجه به نياز به خصوصيات يك نوع مسئله خاص به كار گرفته شود. الگوي الگوريتم هاي انطباقي مثل به صورت واحد در آوردن باعث مي شود كه بتواند تشخيص دهد كه چه موقع خصوصيات يك مسئله منطبق با يك برنامه اطلاعاتي است كه بر اين اساس اطلاعات لازم براي كاربرد در مسئله را انتخاب مي كند.

 

بنابراين حائز اهميت مي باشد كه يك زبان AI بتواند آن را مستقيما ايجاد كند و يا توسعه الگوي كنترل را ساده سازد.

 

در PROLOG يكي كردن و جستجوي الگوريتم ها در درون خود زمان ساخته مي شوند و قلب و اساس PROLOG را تشكيل مي دهند .

 

با استفاده از اين يكي كردن الگوريتم ها به سادگي مي توان هر نوع الگوي ساختاري كنترلي را ايجاد كرد .

 

LISP مستقيماً الگوي انطبقي ايجاد نمي كند اما محاسبات سمبوليك آن موجب گسترش ساده مربوط به زبان ساده ساختار الگوي منطق شونده و توصيف كننده اوليه ساختار مي شود.

 

يكي از مزاياي اين نظريه اين است كه الگوي تطبيق و كنترل ساختارهاي همراه با آن ممكن است به سادگي براي تطبيق با نيازهاي يك مسئله بخصوص خود را منطبق سازد.

 

اغلــــب نظـــريات فعلي در ارتباط با هوش مصنوعي همانند شبكه هاي عصبي عوامل تنظيم كننده و ديگر فرم هاي محاسبات ضروري ممكن است اجتناب از عمليات بر روي ساختارهاي سمبوليك باشد.

 

ولي آنها نياز به يك كنترل انعطاف پذير را نفي نمي كنند. شبكه هاي عصبي مي بايستي توانايي حركتي شكل گيري خودشان را داشته باشند . عوامل متكي به پيام هستند كه از بين ماحوبهاي مختلف مي گذرد.

 

الگوريتم هاي ژنتيكي نياز به ايجاد واحد هاي شمارش به عنوان جمعيت كانديد شده حل مسئله دارند. توانايي زبان هاي AI براي ايجاد مشخصه تركيب ساده طبقه بندي اتوماتيك حافظه امكان اطلاع رساني ساده ايجاد متغيرها و روش هاي پويا و شكل هاي قوي ايجاد برنامه مثل يك برنامه شيء گرا موجب خواهد شد كه آنها را به سمت استفاده گسترده در كاربرد اين ابزارهاي جديدتر AI سوق دهد.

 

 

 

پشتيباني از روش هاي برنامه نويسي جستجويي.

 

مسائلي كه AI به آن مرتبط مي باشد هميشه پاسخگوي يك چنين نظريه هاي مهندسي نرم افزار استاندارد كه شامل طراحي كامل و پردازش موفقيت آميز و توسعه برنامه از خصوصيات و ويژگيهاي دقيق است نمي تواند باشد. به دليل طبيعت و ذات و نوع بخصوص AI به ندرت اين احتمال به وجود مي آيد كه بتوان ويژگيهاي درست و كاملي از شكل نهايي يك برنامه AI قبل از ساخت حداقل يك proto type بدست آورد. اغلب موارد شناخت مسئله برنامه مربوط مي شود به حل موارد درگير مسئله از طريق توسعه برنامه . دلايل آن عبارت است از :

 

1 – بيشتر مسائل AI اصولا مشخصه هاي ضعيفي دارند.

 

به دليل اينكه پيچيدگي زيادي براي پشتيباني از سطح اطلاعات لازم مي باشد به ندرت احتمال مشاهده يك مسئله و تشخيص كامل بودن نظريه دقيق كه بايد در جايگاه خودش باشد وجود دارد.

 

بهترين ساختارهاي سطح نشانه اي كه در يك مسئله مورد استفاده قرار گيرند به ندرت در مشخصه هاي سطح دانش قرار مي گيرند. اين نوع پيچيدگي و نامفهومي خود را به روش هاي معمول مربوط به نرم افزارهاي مهندسي مرتبط نمي دانند چون كه در اين نوع برنامه ها لازمه اش اين است كه مشخصه هاي مربوط به توسعه به خصوص مسئله قبل از اينكه مرحله كدبندي آغاز شود شكل مي گيرد.

 

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

 

به عنوان مثال براي طراحي يك مدار يا بهبود يك بيماري اين به چه معني است؟ چگونه يك انسان ماهر و متخصص اين عمليات ها را شكل مي دهد؟ سطح رضايت بخش ايجاد يك محدوده مسئله داده شده چه چيزي است؟ چه نوع دانش و اطلاعاتي لازم مي باشد؟ چه مشكلاتي ممكن است به دلايل نبود و يا غير واقعي بودن اطلاعات پيش بيايد؟ به دليل جوابهاي به اين قبيل سؤالات و ديگر سؤالات كه در يك دوره كلي مطرح مي شود و بسيار تخصصي مي باشند و هر وقت اين طور باشد ساختار آن نيز عميق تر و پيچيده تر مي شود به همين نسبت حل آن نيز به دقت بيشتري نياز دارد.

 

2 – نظرياتي كه براي حل مسائل به آن پراخته مي شود در محدوده بخصوصي قرار مي گيرند.

 

گر چه چهار چوب هاي كلي براي حل مسائل AI وجود دارد به عنوان مثال سيستم توليد جستجو در زبان دامنه و محدوده هر مسئله نيازمند روش هاي خاص خود مي باشد.

 

بنابراين راه حل موفقيت آميز مسئله به ندرت به طور كامل براي محدوديتهاي جديد عموميت و كاربرد دارد هر كاربرد تا حدودي يك نوع مسئله جديد مي باشد .

 

3- ساختارها و اشكال بيان AIبه طور پيوسته بايد توسعه و تجديد شود

 

توسعه AI يك پروسه تحقيقي مداوم است . توسعه سيستم هاي AI كاربردي در بسياري از روشها بسط و توسعة اين پروسه ها مي باشند . گرچه تجربه عمدتاً به كاربرد زبان كمك مي كند ولي عموماً هيچ جايگزيني براي كاربرد يك ايده و اينكه چگونه عمل مي كند وجود ندارد .

 

به همين دليل AI اصولاً به صورت جستجوي است . برنامه اغلب به صورت ماشيني است كه از طريق آن ما مي توانيم دامن مسئله را كشف كنيم و روش هاي حل مسئله را كشف كنيم در حقيقت ابزاري است كه با آن به شناخت مسئله نائل مي شويم .

لینک به دیدگاه

چالش در برنامه نويسي AI ، پشتيباني برنامه ريزي كشفي است . در بين خصوصياتي كه يك زبان برنامه نويسي بايد ايجاد كند موارد ذيل وجود دارد :

 

1- Modularity

 

2- قابليت گسترش

 

3- ساختارهاي سطح بالاي مفيد

 

4- پشتيباني از Prototype سازي اوليه

 

5- قابل خواندن بودن برنامه

 

6- مترجم ها

 

7- پشتيباني نرم افزاري براي برنامه نويسي جستجويي

 

ما اين عناوين را در پاراگراف هاي زير مورد بحث و بررسي قرار خواهيم داد :

 

 

 

1-قابليت Modularity كدها

 

حائز اهميت است كه يك زبان براي برنامه نويسي كشفي از يك سري تعاريف متوالي مربوط به كدها پيروي كند اين بيانگر اين است كه مسائل مي بايستي شامل قسمت هاي كوچك و مطلوب باشد نه بدنه هاي پيچيده كه بندي شده ارتباط متقابل بين محتوي برنامه بايد محدود باشد و به خوبي نيز توصيف شده باشند.

 

اين شامل پرهيز از تأثيرات جانبي و متغيرهاي جهاني (global) و اطمينان از رفتار هر Module واحد در شناخت برنامه باشد كه بتواند به خوبي قابل تشخيص باشد.

 

برنامه هاي LISP به صورت مجموعة انتخابي از عملكردهاي واحد مي باشند در يك برنامه LISP كه به صورت مطلوب نوشته شده باشد هر عملكرد كوچك مي باشد كه يك كاركرد خوب و واحد را شكل مي دهند.

 

بنـــابراين اغلب جايگزيني و اصلاح علت هاي هر كمبودي، ساده مي باشد. روش هاي اندازه گيري متغير LISP و پارامترهاي مربوط به آن اغلب براي كاهش تأثيرات عملكردي به كار گرفته مي شوند. متغيرهاي جهاني،‌گر چه به وسيله زبان پشتيباني مي شوند ولي استفاده در كدهاي متناسب LISP نهي شده اند.

 

علاوه بر اين LISP دسته بندي شي گرا را از طريق سيستم شيء LISP به صورت CLOS پشتيباني مي شود.

 

در PROLOG واحد اصلي برنامه روش و قانون است، قوانين PROLOG همانند عملكردهاي LISP كوچك و ويژه هستند.

 

به دليل اينكه محدوده و قياس متغيرها در PROLOG اغلب محدود به يك شيوه و قانون شده اند، و زبان اجازه تغييرات جهاني را نمي دهد. توصيف كردن اصولاً ساده مي باشد.

 

LISP و PROLOG شامل مشخصه هاي سهل و آساني مي باشند كه هنگامي كه با يك ساختار برنامه مشخص تركيب شوند، موجب آسان شدن پرداخت آن مي گردند.

 

 

 

2-قابليت گسترش

 

اصولاً برنامه نويسي جستجويي در قالب يك پروسه داراي ساختار سطح بالاي برنامه اي است كه به گونه كد توسعه يافته است. يك روش مهم براي انجام اين پروسه در قالب سيستماتيك و با ساختار مناسب،‌توسعة يك زبان نهفته در ‌آن است.

 

اغلب امكان توصيف شكل نهايي يك برنامه AI وجود ندارد،‌اما امكان تشخيص ساختارهاي سطح بالا و مفيد براي كشف و بررسي دامنه مسئله وجود دارد. اين ساختارها مي توا ند شامل الگوهاي مناسب ، كنترل كننده هاي جستجو وعملكردهاي توصيف يك زبان توصيفي باشد.

 

اصـــولاً ايـــن نظـــريه كه مي گويد اگر شما ساختار نهايي يك برنامه را تشخيص ندهيد مي بايستي سعي كنيد كه ساختار زبان را توصيف كنيد كه به شما كمك خواهد كرد كه آن ساختار را توسعه دهيد.

 

براي پشتيباني از اين روش، يك زبان برنامه نويسي بايد به صورت سهل و آسان قابل گسترش باشد و به طور ساده آنها را توسعه دهد. به وسيله توسعه و گسترش كه همان توانايي توصيف ساختارهاي زباني جديد است كه داراي حداكثر آزادي و انعطاف باشند.

 

LISP و PROLOG و همچنين توسعة شيء گرا آنها همانند CLOS همگي موجب مي شوند كه توصيف سادة اهداف، پيش بيني ها و عملكردهاي جديد ، صورت پذيرد.

 

هنگامي كه توصيف صورت پذيرفت، اين ساختارهايي كه كاربر ايجاد كرده داراي رفتاري شبيه به ساختارهاي اساسي زبان مي باشند.

 

اين زبانها به وسيله توسعة توانايي هاي اصولي از ابتدا تا حل آن برنامه ريزي مي شوند. دراين صورت،‌گفته مي شود كه برنامه هاي معمول، ساختاربندي مي شوند ولي برنامه هاي AI رشد و توسعه مي يابند.

 

اين مورد با تشخيص سريع مقايسه مي شود كه در اين مورد زبانهاي معمولي مابين خصوصيات ساختاري و برنامه هاي توسعه يافته، كاربردي واقع مي شوند.

 

در يك برنامه ما ممكن است عملكردهاي جديدي را تعريف كنيم اما ساختار آنها بسيار محدودتر از ســـاختارهاي از قبل ساخته شده است. اين موجب محدوديت انعطاف پذيري و استفاده از اين توسعه و گسترش ها مي شود.

 

LISP و PROLOG همچنين موجب ساده شدن نوشتن توصيف متغيرهاي ويژه يك زبان خاص مي شوند. در LISP برنامه ها و اطلاعات به گونه ساختاري ليست مي شوند. اين باعــث ســادگي نوشتن برنامه اي مي شود كه از كد LISP به عنوان داده (Data) استفاده مي كنند كه در اين صورت باعث ساده تر شدن توسعه، تصويفي مي شوند.

 

بسياري از زبانهايي كه از نظر سابقه و همچنين اقتصادي در نوع زبانهاي AI حائز اهميت مي باشند، مثل PLANNER و ROSIE و KEE و OPS بر اساس توانائي هاي LISP ساخته مي شوند.

 

PROLOG اين توانائي ها را در قالب تعدادي “meta – predicates” كه قابل پيش بيني براي تركيب با ديگر مشخصه هاي PROLOG باشند. ايجاد مي كند كه در اين صورت باعث ساده شدن نوشتاري آن مي گردد.

 

همراه با LISP تعدادي زبانهاي سطح بالا AI بر اساس PROLOG ساخته شده اند كه از اين روش استفاده مي كنند.

 

 

 

3-وجود ساختارهاي مفيد سطح بالا

 

برنا مه نويسي جستجويي به كمك يك ساختار قوي سطح بالا در زبان به وجود مي آيد،‌اين ساختارهاي قوي و كلــــي به برنامه نويس اجازه توسعه سريع ساختارهاي ويژه براي بيان اطلاعات توصيفي و كنترل برنامه را مي دهند.

 

در LISP اينها شامل اصول اساسي نوع اطلاعاتت مي شود كه موجب ايجاد ساختارهاي پيچيده اطلاعاتي و عملكردهاي قوي براي توصيف عمليات بر روي آ‌نها مي شود. به دليل اينكه LISP قابل گسترش مي باشد و براي چندين دهه است كه مورد استفاده قرار مي گيرد. مهمترين و قوي ترين عملكردهاي توصيفي LISP همان خصوصيات استاندارد زباني آنها مي باشد. ويژگيهاي معمول LISP شامل جيدها عملكرد براي ايجاد ساختارهاي اطلاعاتي، ساخت تداخلگرها و قابليت Edit كردن ساختارهاي LISP مي شوند.

 

PROLOG به عنوان يك زبان مقايسه اي كوچك مطرح است كه بخشي از آن به دليل نو بودن و بخش ديـــــگر به دليل عدم سادگي و كامل بودن آن است با اين حال PROLOG به كاربرها اجازة ايجاد پيشگوئي هاي به خصوص را مي دهد و مفيدترين اينها راه خود را براي استاندارد شدن باز كرده اند.

 

 

 

4-پشتيباني براي ساخت Prototype اوليه

 

يكي از روش هاي برنامه نويسي جستجويي و مهم، Prototype سازي اوليه مي باشد. در اينجا برنامه نويس يك راه حل سريع براي مسئله پيدا مي كند و از آن براي جستجو فضاي مسئله استفاده مي كند. وقتي كه مسئله مورد بررسي قرار گرفت و روش حل آن مشخص شد، Prototype كنار گذاشته مي شود و يك برنامه نهايي كه تأكيد آن بر روي صحت و مؤثر بودن مي باشد، ساخته مي شود. گر چه مشكل است كه چيزهايي را كه زياد مورد استفاده قرار مي گيرند تا براي ساخت يك برنامه كامپيوتري به كار روند، كنار گذاشت، ولي انجام چنين كاري باعث صرفه جوئي در زمان و بهبود كيفيت نهائي كار مي شود. ساخـــتارهاي ايجاد شده به وسيله زبانهاي AI عمدتاً باعث افزايش سرعت توسعة Prototypeها مي شوند.

 

5-قابليت خواندن برنامه و مستندسازي آن

 

به دليل اينكه اغلب برنامه هاي AI به طور گسترده اي از طريق خودشان توصيف مي شوند ولي اين نكته حائز اهميت است كه كد بتواند قابل خواندن و قابل مستندسازي باشد. در عين حاليكه هيچ نوع جايگزيني براي محتوي زبانهاي معمول در كد وجود ندارد، ولي با اين حال زبـــان هـــاي AI همـــراه بـا Moduleهاي با ساختار سطح بالا باعث ساده شدن اين عمل مي شوند.

 

6-مفسرها

 

بيشتر زبانهاي AI قبلاً ترجمه شده هستند نه اينكه در طول برنامه بخواهند ترجمه شوند. اين بدان معني است كه برنامه نويس لازم نيست به مدت طولاني هر زمان كه كد تغيير كرد برنامه را تعريف مجدد كند.

 

با توجه به مسائل عملكردي در ترجمه كد، زبانهاي AI مدرن به Module هاي ويژه اجازه تعريف مجدد براي يك موقعيت متوسط را مي دهند كه از اين طريق برنامه هاي سطح بالاتر بهتر تعريف مي شوند. علاوه بر اين بسياري از كاربردها به برنا مه ها اجازه تكميل شدن نهايي برنامه ها را مي دهند.

 

7-محيطهاي توسعه

 

زبانهاي جديد AI در برگيرنده محيطهاي برنامه ريزي مي شوند كه ابزارهاي ايجاد كلي و يا بخشـــي از برنامه را فراهم مي كنند.بسياري از كاربردهاي زباني شامل ويرايش هوشمند مي شــوند كه اشتباهات را به عنوان يك كد نوشتاري در نظر مي گيرد. به دليل پيچيدگي برنامه هاي AI و مشكل بودن پيش بيني عملكرد هر سيستم توليد، اهميت اين پشتيباني هاي سهل نمي تواند قابل تصور باشد.

 

Dynamic Binding and constraint propagation

 

زبانهاي معمول نياز به اين دارند كه بيشتر برنامه هاي مرتبط با آن در يك مدت زمان خاص تشخيص داده شوند.

 

شامل اتصال دادن متغيرها به محيط حافظه و انتقال روش هاي به نام هايشان مي باشد. با اين حال بسياري از روش هاي برنامه نويسي پيشرفته مثل، برنامه نويسي هاي شيء گرا نياز به اين اتصال ها براي تشخيص ديناميكي دارند.

 

برنامه هاي Prolog و LISP پشتيبان قيدگذاري ديناميكي هستند. از يك نقطه نظر AI يكي از مهمترين منافع قيدگذاري ديناميكي پشتيباني از برنامه نويسي ساختاري است. اغلب مسائل مربوط به يك برنامه AI نيـــاز به ايــــن دارد كه ارزش هاي مشخصه هاي خاص ناشناخته باقي مي ماند تا زماني كه اطلاعات لازم جمع آوري شوند.

 

اين اطلاعات ممكن است به گونه يك سري از ساختارها بر اساس ارزش ها باشد كه يك متــغير از آن انتظار دارد. هم چنانكه ساختارها جمع شوند يك سري از احتمالات كاهش مي يابد و در نهايت به يك راه حل منتهي مي شود كه تمامي ساختارها را تحت پوشش مطلوب قرار مي دهد.

 

يك نمونه ساده از اين نظريه ممكن است در يك سيستم تشخيص پزشكي ديده شود كه اطلاعات دربارة نوع بيماري مريض جمع آوري مي شود تا زماني كه اطلاعات مربوطه محدود به نوع خاصي از بيمار شوند زبان برنامه نويسي مقايسه اي اين روش از نوع متغير قيدگذاري اوليه يا توانايي حصول يك متغير نامركب مي باشد در حاليكه آن را در كد برنامه جمع مي كند.

 

LISP و PROLOG به متغيرها اجازة ترجمه وافزايش غيرمركب را مي دهند، در حاليكه توصـــيف ارتبـــاطات و وابستگي هاي بين اين متغيرها و ديگر واحدهاي برنامه را انجام مي دهد. اين موجب كاربرد آسان و طبيعي نوع قيد مي شود.

 

 

 

6. تعاريف مشخص و واضح

 

لازم است كه زبانهاي AI همراه با زبانهاي ديگر برنامه نويسي براي توسعه گسترده كامل و در عين حال منطقي سيستم، به كار گرفته شوند.

 

متأسفانه زبانهاي برنامه نويسي معمول مثل Fortran و پاسكال داراي تعاريف مشكل و پيچيده اي هستند اين موارد مي تواند ناشي از واقعيت خود زبان باشد كه اصولاً داراي خصوصيات ساختاري سطح بالايي در كامپيوتر دارند و در خودشان سيستم هاي فيزيكي و پيچيده اي دارند. به دليل اينكه زبانهاي AI داراي اساس و پايه رياضي هستند مثل PROLOG و LISP ،‌آنها مي بايستي معاني ساده تري باشند كه داراي قدرت و ظرافت نهفته در رياضي باشند.

 

اين موجب مي شود كه اين زبانها عمدتاً براي تحقيقات در محدودة به كارگيري دانش ابزارهاي زبان، ايجاد برن امه درست،‌و اتوماتيك كردن تأثير گذاري كد، مفيد واقع شوند.

 

همـــچنين بـــايد توجه داشت كه گر چه عملكرد بسياري از برنامه هاي AI كاملاً پيچيده مي باشد ولي كدي كه داراي اين عملكرد است بايد ساده و مشخص باشد.

 

بلوك هاي بزرگ مركب و پيچيده با كد مشخص داراي AI مناسب نمي باشند يك زبان خوب توصيف شده،‌يك ابزار مهم براي دريافت اين اهداف مي باشد.

 

 

 

خلاصه اي دربارة LISP و PROLOG

 

به وسيله برآورده كردن نيازهاي گفته شده، LISP و PROLOG هر دو داراي زبانهاي برنامه نويسي غني و كاملي هستند وقتي كه اين زبانها را فرا مي گيريم، دانشجو در ذهن و فكر دربارة روشهايي كه آنها به وسيله ويژگيهاي خاص هر زبان پشتيباني مي كنند، نيازها را نگه داري مي كنند.

 

PROLOG

 

PROLOG يكي از بهترين نمونه و مثال يك زبان برنامه نويسي منطقي است. يك برنامه منطقي داراي يك سري ويژگيهاي قانون و منطق است . PROLOG از محاسبة اوليه استفاده مي كند. در حقيقت خود اين نام از برنامه نويسي PRO در LOGIC مي آيد يك مفسر برنامه را بر اساس يك منطق مي نويسد. ايده استفاده توصيفي محاسبه اوليه براي بيان خصوصيات حل مسئله يكي از محوريت هاي مشاركتPROLOG مي باشد كه براي علم كامپيوتر به طور كلي و به طور اخص براي زبان برنامه نويسي هوشمند مورد استفاده قرار مي گيرند. نفع اسفتاده از محاسبه اوليه براي برنامه نويسي شامل يك ساختار ظريف و ساده و قابل معني مي شود.

 

به دليل همين خصوصيات است كه PROLOG به عنوان يك محرك اصلي و مفيد براي تحقيقاتي مثل موارد برنامه نويسي آزمايشي به عنوان يك كد، متغير كردن برنامه و طراحي ويـــژگيهـاي زبان سطح بالا، مطرح است. PROLOG و ديگر زبانهاي منطقي يك سبك برنامه نويسي مشخصي را دنبال مي كنند كه در آنها برنامه ها به صورت دستورات پشت سرهم و متوالي براي ايجاد يك الگوريتم، نوشته مي شوند. اين نوع برنامه اصولاً به كامپيوتر مي گويد كه «چه چيزي درست است» و «چه چيزي بايد صورت گيرد» و اين به برنامه نويس اجازه مي دهد كه بر روي حل مسئله به صورت يك سري خصوصيات از يك محدوده تأكيد كند تا اينكه بخواهد به جزئيات نوشتاري سطح پائين ساختارهاي الگوريتمي براي بعد بپردازد.

 

اولين برنامه PROLOG در مارسي فرانسه در اوايل 1970 به عنوان بخشي از زبان معمول يك پروژه نوشته شد. تئوري نهفته در پشت اين زبان در كارهاي كوالسكي،‌هيز و ديگران آورده شده است. عمدة توسعة PROLOG بين سالهاي 1975 تا 1979 در بخش هوش مصنوعي دانشگاه ادينبورگ صورت گرفت.

 

در آنجا يك گروه مسئوليت كاربرد اولين PROLOG را به عهده داشتند كه آقاي David H.D مسئول آن بود. اين گروه اولين PROLOG را ساخت كه مي توانست محاسبات كلي را انجام دهد. اين محصول بر اساس سيستم DEC-10 ساخته شده بود و مي توانست در مدهاي توصيفي و مقايسه اي كارآئي داشته باشد.

 

مزيت اين زبان به وسيله پروژه هايي كه براي ارزيابي و گسترش قدرت بيان برنامه هاي منطقي نوشته شده اند،‌ اثبات شده است.

 

بحث دربارة يك چنين كاربردهايي مي تواند در سمينار و گردهمائي هاي مربوط به زبان برنامه نويسي هوش مصنوعي در سطح بين المللي مطرح شود.

 

LISP

 

LISP اولين بار به وسيله JACK MCCARTHY در اواخر دهه 1950 مطرح شد اين زبان به عنوان يك مدل پيوسته محاسباتي بر اساس تئوري عملكرد مجدد،‌معرفي شد.

 

در مقالات اولية مك كارتي (1960) اهداف خود را مشخص مي كند: ايجاد يك زبان سمبوليك تا يك زبان محاسباتي. ايجاد زباني كه بتوان از آ‌ن به عنوان يك مدل محاسباتي بر اساس تئوري عملكرد مجدد استفاده كرد و از آن بتوان براي تعريف دقيق يك ساختار و تعريف زباني استفاده كرد.

 

گر چه LISP يكي از قديمي ترين زبانهاي محاسباتي است كه هنوز فعال است، ولي دقت كافي در برنامه نويسي و طراحي توسعه باعث شده كه اين يك زبان برنامه نويسي فعال باقي بما ند.

 

در حقيقت اين مدل برنامه نويسي طوري مؤثر بوده است، كه تعدادي از ديگر زبانها بر اساس عملكرد برنامه نويسي آن واقع شده اند مثل FP ، ML و SCHEME .

 

اين ليست اساس برنامه ها و ساختارهاي اطلاعاتي در LISP است، LISP خلاصه شده نام پروسه LIS است. اين برنامه يك سري ليست هاي عملكردي درون ساختاري دارد.

 

LISP به برنامه نويس قدرت كامل براي اتصال به ساختارهاي اطلاعاتي را مي دهد.

 

اصولاً LISP يك زبان كامل است كه داراي عملكردها وليست هاي لازمه براي توصيف عملكردهاي جديد، تشخيص تناسب و ارزيابي معاني مي باشد.

 

تنها هدف كنترل برنامه بازگشت و شرايط منحصر به فرد است. عملكردهاي كامل تر هنگامي كه لا زم باشد در قالب اين اصول تعريف مي شوند. در طي زمان بهترين عملكردها به عنوان بخشي از زبان مي شوند. پروسه توسعة زبان به وسيلة اضافه كردن عملكردهاي جديد موجب توسعه محورهاي زيادي از LISP مي شوند كه اغلب شامل صدها عملكرد بخصوص براي ايجاد اطلاعات كنترل برنامه، خروجي و ورودي، Edit كردن عملكردهاي LISP مي شوند.

 

اين ارتباطات محركه اي هستند كه به وسيله LISP از يك مدل ساده و ظريف به يك مدل قوي و غني و عملكردي براي ساخت سيستم هاي نرم افزاري بزرگ، تبديل مي شود.

 

يكي ازمهم ترين برنامه هاي مرتبط با LISP برنامه SCHEME مي باشد كه يك تفكر دوباره دربارة زبان در آن وجود دارد كه به وسيله توسعه AI وبراي آموزش اصول مفاهيم علم كامپيوتر مورد استفاده قرار مي گيرند.

 

 

 

7. برنامه نويسي شيء گرا

 

برخلاف برنامه LISP و PROLOG ،‌برنامه شيء گرا ريشه در مهندسي نرم افزار دارد. اولين بار در سال 1970 توسعه يافته كه به وسيله Alan Kay اين تحقيقات صورت گرفته است.

 

ساخت ايده ها از محرك، كه زبان نروژي تظاهر مي كند در سال 1960 و مقاله Symour در استفاده از LOGO براي آموزش كودكان، صورت پذيرفته است.

 

استفاده از Dyna book براي اولين بار به عنوان يك كامپيوتر، كه افرادي به غير متخصصان علم كامپيوتر با آن سروكار داشتند.

 

بـــه دليل اينكه كاربر افراد معمولي بودند سيستم عملكرد و كاربرد نرم افزار نبايد تكنيكي مي بود و به سادگي قابل تشخيص بود. راه حل آنها براي اين مسئله يك مداخلة گرافيكي است با استفاده از منوها و آيكون هاي گرافيكي و اشاره گرها، يك موس يا يك سري برنامه ها براي اديت كردن، داده ها مي باشد.

 

دخالت كاربر در طراحي يك notebook متأثر از طراحي كاربرها براي يك سري كامپيوترهاي تخصصي مثل سيستم هاي به كارگيري كامپيوتر شخصي مثل مكينتاش، ماكروسافت و محل هاي مربوط به ويندوز مي باشد.

 

در يك برنامه small talk ،‌همه چيز در قالب هدف و يك ساختار قابل محاسبه مرك و قراردادي مطرح مي شود. اهداف نه فقط شامل انواع اطلاعات براي محاسبه بلكه شامل انواع روشهاي لازم براي محاسبه حالت و وضعيت هدف نيز مي شوند.

 

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

 

وقتي مواردي از يك نوع اطلاعات به وسيله اهداف توصيف مي شود اين موارد ذاتاً داراي نوع توصيف و روشهاي توصيفي از عملگرهايشان مي باشند،‌براي شكل دادن يك عمليات بر روي يك هدف، يك پيام به سمت هدف فرستاده شده كه حاصل روش مناسبي مي باشد. به عنوان مثال، اضافه كردن 3 و 4 پيام 4+ به سمت شيء 3 فرستاده مي شود و 3 پاسخ مي دهد مي شود 7 .

 

به وسيله ايجاد انواع تركيب اطلاعات و عمل بر روي آنها در يك عمل واحد مربوط به هدف، small talk از كد Modular (پيمانه اي) توسعه و نوع كاربرد براي عناصر اطلاعات و كد مربوط به تكثير آنها، پشتيباني مي كند.

 

به دليل اينكه اهداف small talk در قالب يك كلاس شبكه اي همراه با اهداف كاملاً ويژه كه بخشي از تمامي روش هــاي كاملاً كلي است ، بسيار ساده است كه يك ساختار جديد برنامه اي توصيف كنيم كه عملاً با اهداف موجود در برنامه همراه باشد. بنابراين يك برنامه اصولاً مي تواند قدرت كامل يك سيستم باشد كه شامل گرافيك،‌بازنگري و ارتباط است.

 

علاوه بر اين روش هاي توسعه نرم افزاري مثل ارائه اطلاعات و زبانهاي نهفته، فشار بر اپراتور و استفاده از كدها از طريق يك گروه اصلي و زبانهاي نهفته در قالب يك مدل رايج پشتيباني مي شوند.

 

زبانهاي شيء‌گرا همراه با بسياري از خصوصيات مندرج در يك كلاس اطلاعاتي، شامل كلاس اصلي و توانايي پاسخ در ساختار اطلاعات مي شود به همين دلايل زبانهاي شيءگرا در برنامه نويسي AI استفاده مي شوند.

 

محيطهاي هيبريد

 

نياز به برنامه نويسي اطلاعاتي موجب توسعة تعدادي برنامه نويسي و تكنيك هاي زبان، شامل سيستم هاي توليد،‌قوانين و كلاس شيء‌گرا مي شود.

 

يك سيستم هيبريد بيانگر نمونه هاي چند منظوره در قالب يك محيط برنامه نويسي خاص مــي باشد. گر چه محيطهاي هيبريد متفاوت مي باشد. ولي عموماً شامل خصوصيات ذيل مي شوند.

 

1-نمايش شيء گرا از محدوده اشياء

 

يك چنين سيستم هايي ذاتاً ويژگيهاي كلاس را پشتيباني مي كنند و اغلب شامل يك مكانيسم انتقال پيام براي عكس العمل هدف مي باشند.

 

2-قوانين نمايش اطلاعات neuristic

 

گر چه چهارچوب اهداف به معني توصيف طبقه بندي اهداف، مي باشند. قوانين به عنوان عمدة نظر توصيف مسائل اطلاعاتي مي باشند.

 

ساختار then …. if ….. مناسب شيوة تخصص انساني است كه بيانگر پروسة تصميم گير است. قوانين دريافت اطلاعاتي از اهداف را دارند كه با استفاده از يك زبان كه مستقيماً در چارچوب يك هدف مي خواند و مي نويسد و يا به وسيلة استفاده از پيام كه مستقيماً وارد هدف مي شود صورت مي پذيرد.

 

3-پشتيباني از انواع روش هاي جستجو

 

بيشتر سيستم هاي پشتيباني از جستجوي اوليه و انتهايي حمايت مي كنند عموماً بيان يك هدف در قالب جستجويي ،‌تغيير به سمت عقب مي باشد . علاوه بر اين يك واقعيت تازه دربارة حافظه كاركرد ممكن است ايجاد علت هاي اوليه از قوانين كند كه به وسيله اين واقعيت جديد پشتيباني مي شوند.

 

4-توصيف دامنة كاربرد عملكرد متقابل و تأثيرات جانبي

 

يك demon فـــرآيندي اســـت كه به وسيله عملكردهاي جانبي بعضي از اعمال مشخص مي شود. يك نمونه از استفاده demon كنترل در يك سيستم زماني است كه بيانگر دوره اي در مانيتور يك چاپگر و يا ديگر وسايل مي باشد.

 

demon به وسيله يك زمان مشخص مي شود. محيطهاي AI اين ايده را توسعه مي دهند و باعث ايجاد demon مي شوند كه هنگامي كه هدف توليد يا توصيف شود به كار مي آيند.

 

چنين demonهايي براي به زمان نگه داشتن يك نشانگر در پاسخ به تغيير مقدار مورد استفاده قرار مي گيرند. Demon هاي مهم و مطرح اصولاً داراي مقاديري متغير مي باشد كه هنگامي كه ارزش متغير تغيير كند demon خوانده شده و وقتي كه اين اتفاق افتاد demon ايجاد و خلق مي شود كه اين وقتي اتفاق مي افتد كه يك مقدار خلق شده باشد و ارزش ها در قالب گرافيكي فعال مي شوند كه اين فعاليت مي تواند متغير باشد.

 

5-تداخلگرهاي گرافيكي

 

اينها شامل يك طيفي از امكاناتي مي باشند كه اجازه تداوم و دنبال كردن موارد را مي دهند. به عنوان مثال نشانگرهاي گرافيكي مي توانند ساختار قوانين يك اصل اطلاعاتي را به صورت يك درخت توصيف دهند. يكي از مهمترين خصوصيات محيطهاي هيبريد،‌توانائي اتصال با استفاده از demon مي باشد كه به صورت يك نشانگر گرافيكي متصل به شيء و هدف مي باشد. كه اين موجب عملكرد گرافيكي براي بيان زمان واقعي نشانگر مي باشد كه در حقيقت بيشتر محيط ها داراي يك پشتيباني سطح بالاي از داده هاي گرافيكي مي باشند.

 

6-اجتناب از زبانهاي زيرين

 

روشهايي كه در قالب يك زمان خاص يا پاسخگو مي باشند به وسيله محيط و يا اغلب اوقات LISP و PROLOG يا حتي و يا پاسكال توصيف شده اند كه اين موجب توصيف طيفي فرآيند اطلاات و هم چنين يك برنامه اطلاعاتي كه طيف وسيعي از زبانهاي كه شكل دهنده هندسي، جهت ها و سنسورها و يا ديگر عملكردهايي كه به صورت بهتري در قالب روشهاي الگوريتمي به كار گرفته مي شود را شامل مي شود.

 

7-توانائي ترجمه اطلاعات جهت اجراي سريعتر يا تحويل روي يك ماشين كوچكتر

 

وقتي كه برنامه شيء گرا كامل شد. يك محيط كامل و توسعه يافته اغلب ، بلندي است كه به تدريج افول مي كند و پائين مي آيد بيشتر محيط هاي مدرن AI اجازه كاربرد سريعتر و ساده تر را كه اغلب كوچكتر و ارزانتر است را در يك ماشين ترجمه ايجاد مي كنند.

 

8. يك نمونه هيبريد

 

بسياري از نمونه هاي مطلوب اصولاً از طريق اشيا، ارتباطات و كنش و واكنش متقابل بين آنها واقع يم شود در شكل زير يك نمونه اتصال به وسيله باطري همراه با يك سوئيچ براي يك لامپ (شكل 364) در نظر گرفته شده است.

 

لامپ، باطري و سوئيچ ممكن است هر كدام به وسيله كلاسها بيان شوند كه بيانگر ويژگيهاي باطري، سوئيچ و لامپ باشد . مشخصه هاي الكترونيكي شكل 2 ممكن است به عنـــوان موارد بخصوصي از اين كلاس هاي كلي بيان مي شوند. توجه داشته باشيد كه نمونه ها داراي مقادير نمونه اي مربوط به كلاس خاص شيء مربوط به خود مي شوند به عنوان مثال اگر سوئيچ 1 در حالت خاموش قرار گيرد. قسمت كنترل كه مربوط مي شود به لامپ 1 تحت تأثير قرار خواهد گرفت كه اين موارد در شكل زير نشان داده شده اند.

 

يك قانون ممكن است در اينجا به وجود بيايد كه :

 

اگر نور وارد AND نشود، سوئيچ AND را بسته و باطري درست است بنابراين بايد به قسمتي كه ممكن است آسيب ديده باشد مراجعه كرد.

 

در نمايش هيبريد قوانين داراي ويژگيهايي هستند كه بيشتر بيانگر مقدار اهميت كلاسها و اشياء مي باشند.كه در شكل 3 به آن اشاره شده است. اين قانون ممكن است به عنوان بخشي از قانون اوليه سيستم در تلاش براي به جريان انداختن اين مدار باشد كه در جاي ديگر براي راه اندازي سوئيچ كنترل براي حالات متغير است.

 

9. انتخاب زبان كاربردي

 

همانگونه كه هوش مصنوعي به مرحله رشد مي رسد وقابليت هاي خود را در طيف وسيعي از مسائل كاربردي به اثبات مي رساند اعتماد به LISP و PROLOG نيز مدنظر مي باشد، ‌موارد مربوط به توسعة نرم افزاري، همانند نياز به تداخلگرها به صورت ساده وآ‌سان همراه با يك كد منطقي تا استفاده از AI در Moduleهاي كوچكتر و يا بزرگتر در برنامه ها و نياز به ايجاد توسعه استاندارد متأثر از مشتريان دولتي و يا گروهي موجب توسعة سيستم هاي AI در انواع زبانهاي مثل C ، , C++ Java و Smalltalk شده است.

 

كــه زبــانهاي LISP و PROLOG كار خود را در محدودة توسعه و Prototype سازي سيستم هاي AI در صنعت و دانشگاهها دنبال مي كنند.

 

يـــك اطـــلاعات و دانش كاربردي مربوط به اين زبانها به عنوان بخشي از مهارت هر برنامه نويس AI مي باشد. علاوه بر اين، اين زبانها به عنوان زمينه اي براي بسياري از اين خصوصيات مي باشند كه در ادامه همكاري با زبانهاي برنامه نويسي جديد مي باشند.

 

احتمالاً بهترين نمونه از اين زبانها Java ميباشد كه متناسب با استفاده اولويت ديناميكي اش، داراي مديريت حافظه اتوما

لینک به دیدگاه

واژه نامه

 

 

بندهاي برنامه Prolog شامل مجموعه‌اي از جملات بنام بندها هستند كه براي نشان دادن داده‌ها و برنامه‌ها بكار مي‌روند.

 

تابع مرتبه بالا تعريف تابعي است كه اجازه مي‌دهد آرگومانها يا مقدار بازگشتي تابع، مقدار توابع باشد. نماد ساختار ليستها اغلب نشان‌دهنده نحوه استفاده از ليست ساختاري داده هستند، كه يك عنصر ليست ممكن است نماد يا ليست ديگر باشد. ليستها ساختاري مركزي Lisp هستند كه براي نشان دادن داده‌ها و برنامه‌ها بكار مي‌روند. بازگشت تكنيكي الگوريتمي براي انجام يك كار است كه يك تابع با بعضي از قسمتهاي كار خودش را فراخواني مي‌كند.

 

محاسبات نمادين برنامه‌نويسي هوش مصنوعی (اساساً) شامل دستكاري نمادها است نه اعداد. اين نمادها مي‌توانند اشياء در جهان و ارتباط بين آن اشياء را نشان دهند- ساختارهاي پيچيده نمادها نياز به دانش ما از جهان دارند. واژه ساختار اساسي داده‌ها در Prolog واژه‌اي است كه مي‌تواند يك ثابت، يك متغير يا يك ساختار باشد. ساختارها موضوعات ريز محاسبات گزاره‌اي را نشان مي‌دهند و شامل يك عملگر نام و يك پارامتر ليست هستند.

 

زبانهاي برنامه‌نويسي هوش مصنوعي ابزار اصلي بررسي و ساخت برنامه‌هاي كامپيوتري هستند كه مي‌توانند در شبيه‌سازي فرايندهاي هوشمند مانند يادگيري،‌ استدلال و فهم اطلاعات نمادين بكار بروند. هر چند اخيراً زبان كامپيوتر اصولاً براي استفاده از كامپيوترها براي انجام محاسبات با اعداد طراحي شده بود، اما بزودي دريافتند كه رشته‌اي از بيتها نه تنها اعداد بلكه مي‌توانند اشياي دلخواه را نيز نمايش دهند. عمليات روي ويژه‌گي‌ها يا نمادها مي‌تواند با استفاده از قوانين براي ايجاد، انتساب يا دستكاري نشان داده شود. اين تصور از محاسبات نمادين بعنوان تعريف الگوريتمهايي كه هر نوع اطلاعات را پردازش مي‌كنند و بنابراين مي‌تواند براي شبيه‌سازي هوش انسان بكار برود مناسب است.

 

بزودي برنامه نويسي با نمادها كه نياز به سطح بالايي از چكيدگي دارند توليد مي‌شوند، غير از امكاناتي كه با زبانهاي برنامه نويسي مخصوص پردازش اعداد ممكن بود مانند فرترن

 

 

 

 

زبانهای برنامه نویسی هوش مصنوعی

 

 

در هوش مصنوعی خودكار كردن يا برنامه‌نويسي همه جنبه‌هاي شناخت انساني بوسيله بنيادهاي شناخت علمي روشهاي نمادين و غير نمادين هوش مصنوعی، پردازش زبان طبيعي، ديد كامپيوتري و سيستمهاي تكامل يا سازگار مطرح مي‌شود. لازم است دامنه مسئله‌هاي خيلي پيچيده در ابتداي مرحله برنامه‌نويسي يك مسئله هوش مصنوعی معين، مشخص شود كه كافي نيست. تنها بوسيله تعامل و افزايش اصلاحات خصوصيات بسيار دقيق ممكن است. در حقيقت مسئله‌هاي معمول هوش مصنوعی به بسياري از زمينه‌هاي خاص گرايش دارند، بنابراين روشهاي ذهني بايد بوسيله توليد و آزمايش روشها بطور تجربي توسعه يابند(مشهور به نمونه سازي سريع). در اينصورت برنامه‌نويسي هوش مصنوعی بطور قابل توجهي با روشهاي استاندارد مهندسي نرم‌افزار متفاوت بوده زيرا برنامه‌نويسي معمولا از يك مشخصات رسمي با جزئيات شروع مي‌شود. در برنامه‌نويسي هوش مصنوعی پياده‌سازي در واقع جزئي از پردازش مشخصات مسئله است. به اقتضاي طبيعت مسئله‌هاي هوش مصنوعی برنامه‌نويسي هوش مصنوعی مزاياي بسياري دارد اگر زبانهاي برنامه نويسي، برنامه‌نويسهوش مصنوعی را آزاد بگذارند و در بسياري از ساختارهاي فني محدود نكنند (مانند ساختار انواع داده‌اي جديد سطح پايين، دستيابي دستي به حافظه). ترجيحاً سبك برنامه‌نويسي اعلاني براي استفاده در ساختارهاي پيش‌ساخته داده‌اي سطح بالا(مانند ليستها و درختها) و عمليات(مانند تطبيق الگوها) مناسب است، بنابراين محاسبات نمادين سطح خلاصه‌سازي بيشتري نسبت به آنچه كه با زبانهاي دستوري استاندارد مانند فرترن، پاسكال يا C امكان‌پذير خواهد بود را پشتيباني مي‌كند. البته طبقه‌بندي خلاصه سازي آسان نيست،‌ زيرا تدوين برنامه‌هاي هوش مصنوعی روي كامپيوترهاي استاندارد وان نيومن نمي‌تواند به كارآمدي زبانهاي دستوري باشد. هر چند يك مسئله مسلم هوش مصنوعی فهم آن است (حداقل جزئيات) امكان دارد با تنظيم مجدد آن به شكل خصوصيات جزئي شده با بكار بردن يك زبان دستوري پياده‌ سازي مجدد شود. با توجه به نيازمنديهاي محاسبات نمادين و برنامه‌نويسي هوش مصنوعی دو الگوي جديد برنامه‌نويسي كه به سبك دستوري پيشنهاد مي‌شوند بوجود مي‌‌آيد: سبك برنامه‌نويسي تابعي و منطقي. هر دو بر مبناي رياضيات طرح‌ريزي شده‌اند، يعني نظريه توابع بازگشتي و منطق رسمي. اولين زبان برنامه‌نويسي هوش مصنوعی كاربردي كه هنوز هم بطور گسترده استفاده مي‌شود زبان برنامه‌نويسي Lisp است كه در اواخر دهه 1950 توسط جان مك كارتي توسعه يافته است. Lisp برمبناي نظريه توابع رياضي و خلاصه‌سازي Lambda است. تعدادي از كاربردهاي مهم و موثرهوش مصنوعی در Lisp نوشته شده است. كه ما بعضي از جزئيات اين زبان برنامه‌نويسي را در اين مقاله شرح خواهيم داد. در اوايل دهه 1970 يك الگوي برنامه‌نويسي جديد بنام برنامه‌نويسي منطقي بر اساس محاسبات گزاره‌اي بوجود آمد. اولين و مهمترين زبان برنامه‌نويسي منطقي Prolog است كه توسط آلن كالمرار، رابرت كوالسكي و فيليپ راسل توسعه يافته است. مسئله‌ها در prolog بصورت حقايق، بديهيات و قوانين منطقي براي استنباط حقايق جديد بيان مي‌شوند. Prolog با قانون رياضي در محاسبات گزاره‌اي و نتايج نظري بدست آمده در زمينه اثبات قضيه خودكار در اواخر دهه 1960 بنا نهاده شده است.

لینک به دیدگاه

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

 

 

زبانهاي شيء گرا به الگوي برنامه‌نويسي مشهور ديگري تعلق دارند. در اين جور زبانها اولين وسيله براي تعيين مسئله‌ها، تعيين خلاصه ساختارهاي داده است كه كلاس‌ها، اشياء‌نام دارند. يك كلاس شامل يك ساختار داده همراه با عمليات اصلي‌اش كه اغلب اسلوبها (روشها) نام دارند است. يك ويژگي مهم اين است كه ممكن است كلاسها در سلسله مراتبي از كلاسها و زير كلاسها مرتب شوند. يك كلاس مي‌تواند صفات سوپر كلاسهايش كه پيمانه‌اي بودن را پشتيباني مي‌كنند را به ارث ببرد.

 

مشهورترين زبانهاي شيءگرا C++,Eiffel و Java (جاوا) هستند. سيستم Common Lisp شيءگرا يك توسعه از common Lisp است. آن يكپارچه‌سازي كامل برنامه‌نويسي تابعي و شيءگرا را پشتيباني مي‌كند. اخيراً جاوا در بعضي از زمينه‌ها هوش مصنوعی، خصوصاً در فن‌آوري عامل هوشمند، موتورهاي جستجوي اينترنت يا استخراج داده‌ها كاملاً مشهور شده است. جاوا بر مبناي C++ است و زبان اصلي براي برنامه‌نويسي كاربردهاي اينترنتي است. مهمترين ويژگيهاي زبان كه جاوا را از چشم‌آنداز هوش مصنوعی جذاب مي‌سازد فضاي هرز خودكار پيش‌ساخته آن و مكانيزم چند نخي (چند وظيفه‌اي) آن است.

 

با افزايش تحقيقات در زمينه وب هوشمند يك الگوي برنامه‌نويسي جديد- برنامه‌نويسي عامل‌‌گرا – پديدار شد. برنامه‌نويسي عامل‌گرا يك الگوي جديد برنامه‌نويسي است كه يك نماي اجتماعي از محاسبه را به خوبي پشتيباني مي‌كند. در AOP اشياء بعنوان عاملهايي شناخته مي‌شوند كه براي دستيابي به اهداف شخصي عمل مي‌كنند. عامل در يك ساختار مي‌تواند به پيچيدگي شبكه سراسري اينترنت يا به سادگي يك پيمانه (ماجول) از يك برنامه معمولي باشد. عاملها مي‌توانند موجوديتهاي مستقل باشند يعني بدون دخالت كاربر براي گام بعدي‌شان تصميم بگيرند، يا مي‌توانند قابل كنترل باشند، يعني بعنوان وسيله‌اي بين كاربر و عاملهاي ديگر بكار بردند. از آنجايي كه عاملها زنده در نظر گرفته مي‌شوند، با رشد موجوديتهاي نرم‌افزار، به نظر مي‌رسد انتقالي از نقطه‌نظر زبانهاي برنامه‌نويسي به طرف نقطه‌نظر سكوي پيشرفت نرم‌افزار پديدار مي‌شود. اينجا تأكيد روي طراحي سيستم، سكوي پيشرفت و اتصال است. سئوالات حساس عبارتنداز: چگونه تعدادي از منابع پيشرفته هوش مصنوعی كه در زبانها و سكوهاي مختلف موجودند مي‌توانند با ساير منابع استفاده‌كننده از ابزارهاي پيشرفت سيستم جديد مانند CORBA (معماري عادي رابط درخواست شئ) تركيب شوند (يكپارچه شوند)، خلاصه‌سازي عمومي انواع داده و زبانهاي تفسيري(يادداشت حاشيه‌اي) مانند XML و زبان استاندارد ارتباطات عامل‌گرا مانند KQML (زبان شناخت پرس و جو و دستكاري).

 

بنابراين آينده برنامه‌نويسي هوش مصنوعی كمتر نگران سئوالاتي مثل: ” مناسب‌ترين الگوي برنامه‌نويسي چيست؟ “ است ولي بايد به سئوالاتي مثل: ” چگونه مي‌توانم الگوهاي مختلف برنامه‌نويسي را زير يك سايبان يكپارچه كنم؟ “ و ” بهترين زبان ارتباطي براي نرم‌افزارهاي مستقل پيمانه‌اي هوشمند چيست؟ “ پاسخ دهيم.

لینک به دیدگاه
×
×
  • اضافه کردن...