برمجة الماكرو
في علوم الحاسوب ، تُعدّ البرمجة الكلية نموذجًا برمجيًا يهدف إلى التعبير عن السلوك الكلي الشامل لنظام كامل من العوامل أو أجهزة الحوسبة. [ 1 ] في البرمجة الكلية، تُجمّع أو تُفسّر البرامج المحلية للمكونات الفردية لنظام موزّع من برنامج كلي يُعبّر عنه عادةً من منظور مستوى النظام أو من حيث الهدف الكلي المنشود. [ 1 ] يهدف منهج البرمجة الكلية إلى دعم التعبير عن السلوك التفاعلي الكلي لنظام موزّع كامل من أجهزة الحوسبة أو العوامل في برنامج واحد، أو، على نحو مماثل، إلى تعزيز ذكائها الجماعي . [ 2 ] يجب عدم الخلط بينها وبين وحدات الماكرو ، وهي الآلية الشائعة في لغات البرمجة (مثل C أو Scala ) للتعبير عن قواعد الاستبدال لأجزاء البرنامج.
نشأت البرمجة الكلية في سياق برمجة شبكات الاستشعار اللاسلكية [ 3 ] [ 4 ] [ 5 ] ، ووجدت اهتمامًا متجددًا في سياق إنترنت الأشياء [ 6 ] والروبوتات الجماعية . [ 7 ] [ 1 ]
تشترك البرمجة الكلية في أهداف مماثلة (تتعلق ببرمجة نظام من منظور عالمي) مع البرمجة متعددة المستويات ، والبرمجة الكوريغرافية ، والحوسبة التجميعية .
السياق والدافع
يُعدّ برمجة الأنظمة الموزعة ، وأنظمة الوكلاء المتعددين ، ومجموعات وكلاء البرمجيات (مثل أسراب الروبوتات ) أمرًا معقدًا، نظرًا لضرورة مراعاة العديد من القضايا (كالتواصل، والتزامن، والأعطال). وعلى وجه الخصوص، تتمثل إحدى المشكلات المتكررة في كيفية استنباط السلوك الكلي المنشود من خلال تحديد سلوك المكونات أو الوكلاء الأفراد المعنيين. ويمكن معالجة هذه المشكلة من خلال مناهج التعلم، مثل التعلم المعزز متعدد الوكلاء ، أو عن طريق تحديد برنامج التحكم الذي يُشغّل كل مكون يدويًا. ومع ذلك، فإن معالجة المشكلة من منظور فردي (أو أحادي العقدة) قد تكون عرضة للأخطاء، لأنه من الصعب عمومًا التنبؤ بالسلوك الكلي الناشئ عن شبكات معقدة من الأنشطة والتفاعلات (انظر: الأنظمة المعقدة والظهور ). لذلك، بدأ الباحثون في استكشاف طرق لرفع مستوى التجريد، وتعزيز برمجة الأنظمة الموزعة من منظور أكثر شمولية أو من حيث الهدف العام المراد تحقيقه جماعيًا.
أمثلة
الخيال العلمي
البرنامج التالي مكتوب بلغة البرمجة التجميعية ScaFi [ 8 ]يحدد منطق التحكم في الحلقة اللازم لحساب قناة (حقل منطقي حيث تكون الأجهزة التي تنتج trueهي تلك التي تتصل، من خلال مسار قفزة تلو الأخرى، بجهاز مصدر بجهاز هدف) عبر مجموعة كبيرة من الأجهزة الموجودة التي تتفاعل مع جيرانها.
class SelfContainedChannel extends AggregateProgram with SensorDefinitions {def isObstacle = sense [ Boolean ]( "obstacle" )def isSource = sense [ Boolean ]( "source" )def isDestination = sense [ Boolean ]( "target" )override def main (): Boolean =branch ( isObstacle ){ false }{ channel ( isSource , isDestination , 5 ) }دالة القناة ( المصدر : منطقي ، الوجهة : منطقي ، العرض : مزدوج ): منطقي =dilate(distanceTo(src)+distanceTo(dest)<=distanceBetween(src,dest),width)typeOB[T]=Builtins.Bounded[T]defG[V:OB](src:Boolean,field:V,acc:V=>V,metric:=>Double):V=rep((Double.MaxValue,field)){dv=>mux(src){(0.0,field)}{minHoodPlus{val(d,v)=nbr{(dv._1,dv._2)}(d+metric,acc(v))}}}._2defdistanceTo(source:Boolean):Double=G[Double](source,0,_+nbrRange(),nbrRange())defbroadcast[V:OB](source:Boolean,field:V):V=G[V](source,field,x=>x,nbrRange())defdistanceBetween(source:Boolean,target:Boolean):Double=broadcast(source,gradient(target))defdilate(region:Boolean,width:Double):Boolean=تدرج ( المنطقة ) < العرض}من المثير للاهتمام ملاحظة أن channelالدالة، بالإضافة إلى الدوال المستخدمة لتنفيذها، وهي و و distanceToو distanceBetweenوما dilateإلى broadcastذلك، يمكن تفسيرها ليس فقط من منظور السلوك الفردي للجهاز، بل من منظور كلي . على سبيل المثال، distanceTo(s)تُستخدم الدالة لحساب مجال أقصر المسافات من أقرب جهاز يحقق التعبير s: trueوهذا في الواقع بنية بيانات موزعة تُحافظ على استمراريتها من خلال المعالجة والتواصل مع الأجهزة المجاورة، بطريقة ذاتية التنظيم. من الناحية الدلالية، تُحدد هذه الدوال سلوكًا كليًا (أو جماعيًا) يُنتج بنية بيانات كلية (أو جماعية). ويمكن دمج هذه الدوال/السلوكيات الكلية معًا للحصول على دوال/سلوكيات كلية أخرى أكثر تعقيدًا.
فوج
يمكن استخدام البرنامج التالي في لغة Regiment [ 4 ] لحساب متوسط درجة الحرارة التي يشعر بها النظام بأكمله:
تعريف الدالة %doSum :: float ( float , int ) -> ( float , int );doSum ( temperature , ( sum , count )) { ( sum + temperature , count + 1 ) }منطق البرنامج التفاعلي الوظيفيtemperatureRegion = rmap ( fun ( node ){ sense ( "temperature" , node ) }, world );sumSignal = rfold ( doSum , ( 0.0 , 0 ), temperatureRegion )avgSignal = smap ( fun (( sum , count )){ sum / count }, sumSignal )BASE <- avgSignal % نقل هذه المعلومات إلى المحطة الأساسيةبايوت
يمكن استخدام البرنامج التالي في PyoT [ 9 ] لتشغيل المروحة إذا تجاوز متوسط درجة الحرارة المحسوبة بواسطة عدة مستشعرات عتبة معينة.
temperatures = Resource.objects.filter ( title = " temp " )النتائج = [ درجة الحرارة . احصل على () لكل درجة حرارة في درجات الحرارة ]المتوسط = مجموع ( النتائج ) / طول ( النتائج )عتبة درجة الحرارة = 24إذا كان المتوسط > عتبة درجة الحرارة :Resource.objects.get ( title = " fan " ) . PUT ( " on " )TinyDB
في TinyDB، [ 10 ] يتم استخدام نهج البرمجة الكلية الموجهة نحو البيانات حيث يقوم المبرمج بكتابة استعلام يتحول إلى عمليات عقدة واحدة وتوجيه في شبكة استشعار لاسلكية.
حدد معرف العقدة ودرجة الحرارة حيث تكون درجة الحرارة أكبر من k من جدول المستشعرات ، فترة أخذ العينات 5 دقائقانظر أيضاً
مراجع
- 1 2 3 كاسادي، روبرتو (11 يناير 2023). "البرمجة الكلية: المفاهيم، وأحدث التقنيات، وفرص نمذجة السلوك الكلي". مجلة ACM Computing Surveys ، 55 (13s). رابطة آلات الحوسبة (ACM): 1-37 . arXiv : 2201.03473 . doi : 10.1145/3579353 . ISSN 0360-0300 . S2CID 245837830 .
- ↑ كاسادي، روبرتو (2023-11-01). "هندسة الذكاء الجماعي الاصطناعي: دراسة استقصائية للمفاهيم والآفاق". الحياة الاصطناعية . 29 (4). مطبعة معهد ماساتشوستس للتكنولوجيا: 433-467 . arXiv : 2304.05147 . doi : 10.1162/artl_a_00408 . ISSN 0360-0300 .
- ↑ نيوتن، رايان؛ ويلش، مات (2004). "تدفقات المناطق". وقائع ورشة العمل الدولية الأولى حول إدارة البيانات لشبكات الاستشعار بالاشتراك مع VLDB 2004 - DMSN '04 . نيويورك، نيويورك، الولايات المتحدة الأمريكية: مطبعة ACM. ص 78. doi : 10.1145/1052199.1052213 .
- نيوتن ، رايان؛ موريسيت، جريج؛ ويلش، مات (2007). "نظام برمجة الماكرو للفوج". وقائع المؤتمر الدولي السادس حول معالجة المعلومات في شبكات الاستشعار - IPSN '07 . نيويورك، نيويورك، الولايات المتحدة الأمريكية: مطبعة ACM. ص 489. doi : 10.1145 /1236360.1236422 . ISBN 978-1-59593-638-7.
- ↑ غومادي، راماكريشنا؛ غناوالي، أومبراكاش؛ غوفيندان، راميش (2005). "برمجة شبكات الاستشعار اللاسلكية باستخدام كايروس". الحوسبة الموزعة في أنظمة الاستشعار . برلين، هايدلبرغ: سبرينغر برلين هايدلبرغ. ص 126-140 . doi : 10.1007/11502593_12 . ISBN 978-3-540-26422-4ISSN 0302-9743
- ^ جونيور ، إيوينز جي إس. سانتانا، ثاليا س. دي؛ بولكاو-نيتو، ريناتو دي إف؛ بورتر، باري ف. (2022-11-18). "أحدث التطورات في البرمجة الكلية في إنترنت الأشياء: تحديث" . مجلة خدمات وتطبيقات الانترنت . 13 (1). Sociedade Brasileira de Computacao - SB: 54– 65. دوى : 10.5753/jisa.2022.2372 . ردمك 1869-0238 . S2CID 254365168 .
- ↑ موتولا، لوكا؛ بيكو، جيان بيترو (2011). "برمجة شبكات الاستشعار اللاسلكية". مجلة ACM Computing Surveys . 43 (3). رابطة آلات الحوسبة (ACM): 1-51 . doi : 10.1145/1922649.1922656 . hdl : 11311/635123 . ISSN 0360-0300 . S2CID 1837434 .
- ^ كاسادي ، روبرتو. فيرولي، ميركو؛ أجوزي، جيانلوكا؛ بيانيني ، دانيلو (2022). “ScaFi: Scala DSL ومجموعة أدوات للبرمجة الإجمالية”. سوفت وير اكس . 20 101248. إلسفير بي في. دوى : 10.1016/j.softx.2022.101248 . اتش دي ال : 11585/903248 . ردمك 2352-7110 .
- ↑ أزارا، أندريا؛ أليساندريلي، دانييلي؛ بوتشينو، ستيفانو؛ بيتراكا، ماتيو؛ باجانو، باولو (2014). "PyoT، إطار برمجة ماكرو لإنترنت الأشياء". وقائع الندوة الدولية التاسعة لمعهد مهندسي الكهرباء والإلكترونيات حول الأنظمة المدمجة الصناعية (SIES 2014) . معهد مهندسي الكهرباء والإلكترونيات. الصفحات 96-103 . doi : 10.1109/sies.2014.6871193 . ISBN 978-1-4799-4023-3.
- ↑ مادن، صموئيل ر.؛ فرانكلين، مايكل ج.؛ هيلرستين، جوزيف م.؛ هونغ، وي (2005). "TinyDB: نظام معالجة استعلامات الاستحواذ لشبكات الاستشعار". معاملات ACM لأنظمة قواعد البيانات . 30 (1). رابطة آلات الحوسبة (ACM): 122-173 . doi : 10.1145/1061318.1061322 . ISSN 0362-5915 . S2CID 2239670 .
- نماذج البرمجة
- لغات البرمجة
- الحوسبة الموزعة
