حالا برای درک بهتر کارکرد Netlogo بیایید یک مدل ساده بسازیم
دراین مدل فقط شامل یک متغیر ant به صورت تصادفی می باشد
حالا شروع به کار با Netlogo می کنیم .ابتدا روی نماد تصویری Netlogo5.0.3 و یا هر ورژنی که در دسترس دارید کلیک می کنید
اولین قدم این است که یک Set up و Go بسازیم
در نوارInterface روی Add گزینه Butten را انتخاب می کنیم. در اینجا می توانید گزینه های دیگر که می توان در Interface ساخت رابا کلیک کردن مشاهده کنید
گزینه Butten را انتخاب کرده درفضای Interface کلیک می کنیم و با واژه Set up آن را پر می کنیم
حالا یک Butten دیگر برای Go می سازیم
روی آن (Go) کلیک کرده گزینه Select را انتخاب کرده و آن را حرکت می دهم .همچنین شما در عمل می توانید اندازه آن را با انتخاب Select و کشیدن (Drag) به اندازه دلخواه تغییر دهید.
حالا به سراغ Set up و Go که قرمز هستند می رویم برای اینکه هیج کدی Code ندارند و عملاً عملیاتی را نمی توانند با کلیک کردن انجام دهند.
حالا یک کد می خواهیم برای Set up و Go بسازیم
برای ساختن کد ، برروی نوار Code کلیک می کنیم و مراحل اجرایی را می نویسیم .
اول برای Set up می نویسیم
To Set up
این دستور .... این واژه Clear all .... پاک کردن همه واژگانی که ..... دیده می شود
.....
واکنش ها ، پاسخ ها و هرپنجره ای که ازقبل درجریان بوده و روی آن اثر می گذارد
تایپ می کنیم
reset - ticks
حالا می خواهیم یک a بسازیم
ما باید بدانیم که همه ... همه agent ( بنگاهها ، افراد) در این لوگو ، ،Turtel نامیده می شوند
این اولین نکته تاریخی است که دلیلش زبان اصلی لوگو که پایه Netlogo است . که در آن لوگو - یک agent - یک Turtel است اگر چه عملا بیش از یک Turtel وجود دارد
حالامی سازیم
creat -turtels 1
(1) یک turtel می خواهیم بسازیم
حالا می پرسیم ask که چه فعالیتهایی را انجام بدهد
ask turtel
این لیست فعالیتها با براکت شروع می شود ]
می نویسیم که شکل Bug که می تواند Ant هم باشد
set shape "bug"
set size 3
set color red
این لیست کافی است و باید لییت را ببندیم
(برای بستن می نویسیم)
[
end
حالا کد bug را به کمک چک مارک کنترل می کنیم
برروی آن کلیک می کنیم
نشان می دهد که Bug وجود دارد در حالی من turtel نوشتم و s را فراموش کرده ام که به من اخطار می دهد و دلیل آن، این است کهNetlogo براساس فرضیه جعیت turtels یا agents تعریف شده است
و وقتی سوالی را می پرسیم ask در خصوص فعالیتی می بایست کل جمعیت را بپرسیم
دوباره چک می کنیم
برمی گرداند به Interface و این نشان دهنده آن است که همه دستورات درست است
بر روی set up کلیک می کنیم
و یک ant (مورچه) دقیقاً دروسط مشاهده می کنیم
دکمه go هنوز قرمز است و این برای آن است که هیج کدی ندارد
حالا برایش فرایند را می نویسیم
بر می گردیم به گزینه code
و می نویسیم to go
ask turtels
می خواهیم که به سمت راست 30 درجه بچرخد
right 30
و 4 قدم به جلو برود
forward 4
ok
حالا می خواهیم که زمان را1 (در بالا) افزایش بدهیم که این دستور tick است . نشان می دهد که این فرآیند چند بار تکرار شود
و در پایان می نویسیم end
چک می کنیم به نظرمی رسد که همه چیز درست است
بر می گردیم به interface و دکمه go را فشار می دهیم
و می بینیم که turtel می چرخد (30 درجه) و 3 قدم جلو می رود و با نگهداشتن این دکمه این turtel مثل دایره می چرخد
اگر بخواهیم که بدون نگهداشتن دکمه حرکت کند
بر روی دکمه go راست کلیک می کنیم گزینه Edit و گزینه forever را انتخاب می کنیم
این به معنی آن است که پیوسته به حرکت خود ادامه دهد
اگر سرعت را کمی کم کنیم کاملا ً حرکت دورانی به صورت خودکار مشاهده می شود
با کلیک go متوقف می شود
و برای دوباره شروع کردن بر روی دکمه go کلیک می کنیم
و با کلیک بر go متوقف می شود
و اگر بخواهیم به صورت خط خطی حرکت کند بر روی set up کلیک کرده و دکمه آن را نگه می داریم
دقیقاً در جای اول در وسط شروع می کند ولی در جهتهای مختلف
حالا مدل را برای دفعات بعد save می کنیم
file بعد گزینه save as را انتخاب می و با اسم ant 1 آن را save می کنیم
حالا بر روی desktop فایل ant1.netlogo مشاهده می شود
می رویم بر روی menu file و گزینه quit را انتخاب می کنیم و از برنامه خارج می شویم
برروی فایل ذخیره شده بر روی desktop کلیک کرده و دوباره برنامه را اجرا می کنیم
یک موضوعی که در این مدل اشتباه و خسته کننده است که مورچه ant به صورت دورانی می چرخد
حالا می خواهیم بک کمی جالبترش کنیم
برای این کار به سراغ کد می رویم
و یک دستور ساده به آن اضافه می کنیم
به جای آن که 30 درجه به راست بچرخد با تایپ واژه random به صورت تصادفی بچرخد
در این حالت ant به صورت تصادفی بین 0 تا (1-30) می چرخد
این معنی 30 درجه بکاربرده شده و شما می توانید اندازه های دیگر را هم انتخاب کنید
حتی این جا می توان (دستور دوم ) واژه random را اضافه کرد به این معنی که به صورت تصادفی بین 0 تا (1-4) یعنی 3 قدم به جلو حرکت کند
حالا ببینیم که چه اتفاقی می افتد
بر می گردیم به interface دکمه set up و go را فشار می دهیم
هنوز به صورت دورانی حرکت می کند با این تفاوت که کمی جالب تر است
و اگرتوجه کنید مشاهده می کنید که ant از یک دیوار خارج می شود و از سمت دیگر وارد می شود
در حقیقت جهان شبیه فضای سیاه است که ant به گوشه های آن ضربه میزند
جهان مانند یک donat(کره ای شکل ) است که دیوارهای آن در اینجا صاف هستند
اگر به سمت بالا حرکت کند - سرعت مورچه سریع است - { سرعت را کم می کنیم}
اگر به سمت بالا حرکت کند وخارج شود از پایین وارد می شود
و یا اگر از یک سمت خارج شود ازسوی دیگر وارد می شود
به نظر عجیب می آید کاری که می خواهم انجا ! اگر بر روی فضای سیاه راست کلیک کنید
گزینه Edit را انتخاب کنید و خاموش کنیم ....
اینجا شما کلیه اطلاعا ت مربوط به world ( فضای سیاه ) را بدست می آورید
در اصل set up اصلی world است وتعداد قسمتهای مرتبط به آن Patch که این فضای سیاه را تقسیم می کند
نکته جالب این است که درپیش فرض آن این دو گزینه wrap.... انتخاب شده است
چک مارکها در قسمت .... wrap را برداشته
خب حالا ببینیم که چه اتفاقی خواهد افتاد
حالا ant به دیوارها برخورد می کند و عملاً گیر افتاده است و نمی تواند حرکت کند و به همین دلیل دور خودش می گردد و این به دنیای واقعی نزدیکتر است
حتی اگر به صورت تصادفی بچرخد این خیلی جالب نیست که فقط به سمت راست حرکت کند
می رویم کدی بنویسیم که این اجازه را به بدهد ant به صورت تصادفی هم به راست و هم به چپ حرکت کند
مطمئناً می رویم به سراغ صفحه کد و می نویسیم که هم به راست و هم به سمت چپ حرکت کند
برای اجرای فرآیند کد استفاده می کنم از
?to - report coin flip
دستور report با دو دستور قبلی متفاوت است
این دستورعملاً به ارزش بر می گردد، درست یا غلط بودن مربوط به گفته ها ( دستورات )
می نویسیم
report random 2= 0
End
اگربه خاطر داشته باشید random 2 یعنی به صورت تصادفی بین 0 تااین عدد منهای 1 ( 1-2 ) بار انجام می شود
0=2 این معنی است که به صورت تصادفی 0 بار و یا1 بار
اگربه طور تصادفی 0 بار باشد این نشان می دهد که درست است درغیر این صورت اشتباه است
درست و یا غلط بودن آن را گزارش می دهد
و ارزش کل این دو تا دستور فرآیند coin flip درست ویا غلط بودن آن بیان می شود
در بالا اضافه می کنیم
[?false coin -flip ]
یعنی اگر درست بود به سمت راست .... و در براکت دوم اگراشتباه باشد به سمت چپ به اندازه 30 درجه به چرخد درهر زمان
بنابراین به صورت تصادفی در هرزمان به سمت راست و چپ حرکت می کند
حالا ببینیم که چگونه فعالیت می کند
گزینه set up و بعد go
حالا به همه جهات حرکت می کند . گیر می افتد ولی به جلو و عقب ، راست و عقب حرکت می کند
مشکل اینجا است که بیشتر اوقات گیر می افتد
برای تنظیم کردن آن به جای 30 درجه چرخش ،بهتر است 60 درجه بچرخد
پیشتر این بار بچرخد
دوباره امتحان می کنیم
هی ..! این بار به نظر می رسد کمتر گیر می افتد
و به واقعیت نزدیک تر است
هر وقت یک برنامه ای می نویسید بهتر که برای آن commend بنویسید
بر می گردیم به کد
commend متنی است که در برنامه اثری ندارد ولی کاربران می توانند آن را بخوانند
و commend متنی است که به دنبال ; است
این جا می نویسیم
returned true or false at random
و اینجا یک commend دیگر می نویسیم
if coin -flip ? is true ,turn right also turn left
اینجا یک یادآوری است برای شما و یا افراد دیگری که از این برنامه استفاده می کنند که بدانند چه کاری انجام داده اید
خصوص اگر برنامه پیچیده ای داشته باشیم و بعد ازروز به سراغ آن بیاییم خیلی کمک خوبیست برای یادآوری این که چه کارهایی کرده ایم
حالا می خواهیم برنامه را ذخیره کنیم اول برای آن label می گذاریم
گزینه interface , note را انتخاب می کنیم
و اسم مدل را وارد آن می کنیم
ant 1
یک کمی بزرگ تر 18
این و این را انتخاب می کنیم و کمی پایین تر می آوریم و یا هر جایی که به نظرزیبا تر به نظر می رسد
خب حالا همه اش انجام شد
ذخیره اش می کنیم Save
حالا از Netlogo خارج می شویم
اینجا می خواهم یاد آور بشوم که هدف از آموزش Netlogo کاربرد آن و استفاده آن در مدلهای زیادی تقریباً شبیه که در آینده در کلاس ارائه می شود
در مدلهایی که در آینده می نویسیم با کاربرد کد ها ، interface و ... بیشتر آشنا می شویم
این امکان وجود دارد که شما آینده تغییراتی در مدلها انجام دهید با نگاه کردن به مدلها و مطالعه بعدی آنها را گسترش دهید
در ضمیمه تکلیف و امتحانی وجود دارد که هیچ نمره ای ندارد اما برای محک زدن خودتان از مطالب آموزش داده شده بسیارمفید است .
هر وقت سوالی داشتید می توانید در فرم بپرسید