۸۴

مجموعه های چند بعدی – نحوه تعریف و کاربرد آنها

بارها و بارها تأکید کرده ایم که شما می توانید با تعریف مجموعه های چند بعدی هم سرعت حل مدل، هم نظم کد نویسی و هم دقت آن را بالا ببرید. به یاد داشته باشید، در مدل هایی که نیاز به تعریف set دارند، مهم ترین بخش همین تعریف set خواهد بود.
در تعریف مجموعه ها(set یا اندیس) شما به چند مهارت نیاز دارد.
این مهارت ها شامل تعریف مجموعه، اجتماع و اشتراک مجموعه ها، مجموعه های چند بعدی، مجموعه ی تهی، مجموعه های بدون بعد و… هستند.
در این تاپیک به تعریف مجموعه های چند بعدی پرداخته و جهت کاربرد آنها چند مثال را بیان می کنیم.
فرض کنید شما دو مجموعه ی زیر را دارید:

set i/a,b/
j/c,d,e/

حال قصد دارید یک متغیر تعریف کنید به نام x(i,j) که تنها زمانی بتواند عدد بگیرد که i برابر a و j برابر e باشد. به یاد داشته باشید، که تعریف این متغیر در دستور variable با شرط گفته شده غیر ممکن است! از طرفی یک متغیر تنها و تنها زمانی در کد شما دارای معنی است که در حداقل یک Equation مورد استفاده قرار گرفته باشد. پس باید متغیر را یکبار تعریف کرده و هر جا که مورد استفاده قرار می گیرد با یک شرط به گمز بفهمانید که تنها وقتی i برابر a و j برابر e باشد این محدودیت اجرا شود.
عملی که در اینجا مورد نیاز است تعریف یک مجموعه چند بعدی است. به مثال زیر توجه کنید:

set i/a,b/
j/c,d,e/
E(i,j)/a.e/

اگر کد بالا را ران کنید و مجموعه E را display کنید نتیجه به شکل زیر خواهد بود:

---- ۴ SET E 
-- e

a YES

به عبارتی وقتی I برابر a و j برابر e باشد مجموعه ی E عبارت yes را به خود می گیرد و این بدین معنی است که در سایر مواقع این مجموعه عبارت No را به خود میگیرد. این مجموعه را مجموعه ی چند بعدی می گویند.
حال برگردیم به تعریف متغیر. مثال زیر را مشاهده کنید:

set i /a, b/
j /c, d, e/
E(i,j) /a.e/;
variable x(i,j);
.
.
.
Eq6$(E(i,j)).. y(i,j)-sqrt(something)=e=x(i,j)+...;

کد بالا نشان دهنده ی این است که محدودیت ۶ فقط زمانی صادق است که حاصل E برابر با yes باشد. این امر دقیقا معادل این است که متغیر x را با شروط گفته شده تعریف کرده باشیم. دقت کنید که هر جا x داشتید باید شرط را هم به کار ببرید.
شما در گمز می توانید مجموعه هایی را تعریف کنید که بیش از ۲۰ بعد داشته باشند! مثالها دیگری که در گمز می توانند تعریف شوند در کد زیر مشاهده می شوند:

<code>set i /a, b/
j /c, d, e/
ij1(i,j) /a.#j/
ij2(i,j) /a.c, a.d, a.e/
ij3(i,j) /#i.#j/
ij4(i,j) /a.c, a.d, a.e, b.c, b.d, b.e/
ij5(i,j) /#i:#j/
ij6(i,j) /a.c, b.d/
ij7(i,j) /#i:(d*e)/
ij8(i,j) /#i:(d,e)/
ij9(i,j) /a.(c,d)/;
display i,j,ij1,ij2,ij3,ij4,ij5,ij6,ij7,ij8,ij9

به نحوه ی به کار بردن علامت های پرانتز، شارپ و “.” و “:” دقت کنید. احتمالا سریع مفهوم پرانتز و “.” را دریافت می کنید. عبارت شارپ به معنی تمامی مجموعه و علامت “:” نیز به معنی نظیر به نظیر بودن مولفه های به کار برده شده طبق دستور ord می باشد.
دستور بالا را ران کنید و مقداری در آن تأمل کنید. احتمالا مطالب مفید و کاربردی فراوانی را درخواهید یافت.

جهت آشنایی بیشتر با تعریف مجموعه ها و دستور Set به نوار دسته بندی، تعریف مجموعه ها مراجعه فرمایید.

با تشکر
مدیریت سایت gamsbook.ir

ایمیل: Support@gamsbook.ir
شماره تماس: ۳۳۲۵-۴۰۵—۰۹۱۹

 

84 دیدگاه در “مجموعه های چند بعدی – نحوه تعریف و کاربرد آنها

  1. با سلام و خسته نباشید.
    یه سوال دررابطه با همین تعریف مجموعه ها داشتم. من یک مجموعه دارم مثلا ۵ عضوی:/
    s ‘station’ /s1,s2,s3,s4,s5، حالا میخوام چن تا subset با توالی های مختلف تعریف کنم مثل: /s2,s3,s4 / و /s1,s4,s5,s2 /. منتها اولی مشکلی نیست ولی واسه دومی ایراد میگیره چون ترتیب رعایت نشده! الان من نمیدونم چه جوری این مشکل و حل کنم. گره مجازی تعریف کردوم ولی تو شرط هایی که میخوام واسه محدودیت ها بزارم ایراد میگیره.
    ممنون میشم اگه راهنماییم کنین. و ممنون به خاطر سایت خوبتون.

    • سلام
      ممونم.
      تعریف مجموعه شما خیلی اشکال نداره. شما شرط هایی رو که دارین میذارین به جای دستور ord از دستور uel استفاده کنین. ساده ست. یه مقدار این دستور رو تست کنین یاد میگیرین. ولی اگه با ord بگیرین، چون ترتیب رو رعایت نکردین احتمالا ارور میده. و اینکه مجموعه بزرگتر یا s رو اول تعریف کنید، بعد s1,s2 رو به عنوان زیر مجموعه ش تعریف کنین

      • سلام و مرسی بابت پاسختون.
        خیلی از این دستور uel ک فرمودین سردر نیاوردم!:( به صورت همون گره های مجازی تعریفش کردم دیگه ارور شرطش برطرف شد. مثلا مجموعه کل رو به صورت
        /s1,s2,s3,s4,s5,s55,s44,s33,s22,s11/ تعریف کردم که چهارتای آخر گره مجازین و سابست دومیه تو پست قبلیم به صورت /s1,s4,s5,22/ تعریف کردم. منتها باید به گمز بفهمونم که مثلا s2 همون s22 هستش یا s5 همون s55 هستش، ولی نیدونم چ جوری بهش بفهمونم!
        مرسی.

        • خب اینم براش شرط بذارین که برابر در نظر بگیره. مثلا ord هاشون طبق یه رابطه ای به هم ربط داده بشن. مثلا ords2 مساوی ords22 منهای ۸

        • اونوقت چ جوری باید بنویسمش؟ چون من هرجور مینویسم ارور میده:

          مثلا: cons(s)$(ord(s2) eq (ord(s22)-7))

        • ارور ۳۱۱ ! یه جورایی میگه ord و اینجوری نمینویسن!
          اروررش اینه:
          the function ord(‘string’,expr) needs the second argument…

        • الان که دقت کردم شما Ord رو اشتباه زدین که، ord(s2) درست نیست. باید یه اندیس آزاد مث s بهش بدین. چون s2 خودش یه element تو مجموعه s هست این ارور رو میده.
          شما چرا همون s2 رو به جای s تو متغیرتون نمیزنین؟ اینجوری مثلا x(“s2”)

        • یه چیزی:
          این اروری ک گفتم واسه وقتیه ک s2 و s22 رو تو کوتیشن قرار میدم. وقتی که همینجوری مثه بالا مینویسم ارور ۲ رو میده:
          indentifier expected

        • جناب مهندس مرسی با توضیحات شما اوکی شد این قسمت:)
          یه سوال دیگه بی زحمت. واسه جزء صحیح یه متغیر و گرفتن از floor استفاده میکنیم درسته؟
          آخه من استفاده کردم ارور سینتکسی نمیده منتها میگه:
          cannot handle function ‘floor’
          مرسی و ببخشید سوال زیاد می پرسم.

        • سلام
          نه خواهش میکنم. خوشحال میشم که از طریق این سایت سوالاتتون رو مطرح میکنید.
          فلور رو باید درست به کار ببرید. نباید با بقیه برنامه ها مث متلب قاطیش کنین.

          parameter a;
          a=floor(1.1);
          display a

    • پارامتر نیستا متغیره! ک این متغیر از حاصلضرب یه متفیر ضربدر پارامتر بدست میاد:
      n=t*a که n , t متغیرن و a پارامتر. حالا من میخوام جزء صحیح n و بگیرم. نوع نوشتنی ک فرمودین واسه پارامتر نوشتم اوکیه ولی واسه متغیر نه!


  2. sets
    i Set of product/a,b/
    j Set of month /dey, bahman, esfand/
    Parameters
    C(i) production Cost per month

    CC(i) overtime production Cost per month

    H(i) Holding Cost of product i per month

    MPN(j) capicity of normal production at month j

    MPO(j) capicity of overtime production at month j

    D(i,j) Demand of product i at month j

    با سلام
    نمیدونم این ارور برای چیه؟

  3. ۳۵ dey bahman esfand
    **** $170 $1$148 $334
    36 a 60 110 70
    37 b 50 120 130/
    38 ;
    هنگامی که برای پارامتر D(i,j) مقدار دهی اولیه میکنم این ارور ها رو میده.
    ؟

      • بله دقیقا همینو میزنه. امکانش هست من پروژم رو براتون ایمیل کنم ؟ شاید مشکلش تو نوشتن برنامه هاست و مشکل اساسی داره..
        ممنون میشم راهنماییم کنید… از لحاظ هزینه هم مشکلی نیست… تقدیم میکنم

  4. سلام وقتتون بخیر
    یه سوال داشتم ازتون: تابع floor رو میشه واسه متغیر هم به کاربرد؟؟؟ مثلا: n=t*a که n , t متغیر و a پارامتره. من اینجوری می نویسمش:
    n=floor(t*a)
    بعد مدل و ران میکنم سریع رانش انجام میشه و یه best solution هم میده منتها یه جا می نویسه:problem solving fixed problem. dual variables for nlp subproblem not
    available.
    این ینی این ک ب جوابش هیچ اعتباری نیست؟؟؟ ممکنه ایرادش از floor باشه؟
    با minlp هم رانش میکنم.
    مرسی.

  5. سلام
    ممنون میشم به سوالم جواب دهید.
    فرض کنیم d(i) و n(j) به عنوان متغییر و x(i) پارامتر باشد و دربخش معادلات بخواهیم به صورت زیر تعریف کنیم:
    d(i)=min(abs(x(i)-n(‘۱’)) , abs(x(i)-n(‘۲’)) , abs(x(i)-n(‘۳’)))
    یعنی هر کدام از این سه تا { abs(x(i)-n(‘۱’)) و abs(x(i)-n(‘۲’)) و abs(x(i)-n(‘۳’)) } کوچکتر بود، در d(i) قرار بگیره از چه روشی میتوانم استفاده کنم.
    باز هم ممنون

  6. سلام
    لطفا نحوه تولید اعداد تصادفی یکنواخت برای پارامتری مثل( p(j,i,t را به طوری که j , i, t هرکدام در بازه خاصی باشند را توضیح دهید.
    ممنون

  7. سلام و خسته نباشید
    من یک سوال داشتم در مورد اینکه چطور یک عبارت غیر خطی رو به عبارت خطی تبدیل میشه کرد.به طور مثال تو کد پایین از smax استفاده کردم که مدلم رو غیر خطی کرده . آیا روشی برای خطی کردن این عبارت وجود داره؟

    = sum(t$(ord(t)<=card(t)),(ord(t)*s(j,l,t)))=g
    ((( smax(i$prec1(i,j),(sum(t,ord(t)*s(i,l,t))+p(i,l

    ممنون میشم اگر راهنماییم کنین

    • سلام
      راهش اینه قبل از نوشتن تابع هدف و محدودیت ها با استفاده از لوپ ها مثلا با for مقدار smax رو پیدا کنین و برابر یک متغیری قرار بردین و برای محدودیت ای که گفتین برای smax نوشتن متغیر رو بنویسین

      • سلام
        ممنون از پاسختون. ولی چطور میتونم قبل از نوشتن تابع هدف مقدار smax اون عبارت رو پیدا کنم؟ توی عبارت( s(j,l,t متغیر هست!

        • سلام
          شما میتونین یه عبارت معادل smax رو بنویسین. مث مثال زیر:

          c1(i).. x(i)=e=smax(j,y(i,j);
          * this constraint make your model non-linear
          * try this dear fallah
          x(i)=g=y(i,j);

          این محدودیت یعنی x از همه y ها بزرگتره (تو حالت بهینه برابر بزرگترینشون میشه)

  8. سلام وقت بخیر
    من یه مدل زمان بندی پروژه دارم که توی کد کردن محدودیت پیش نیاری مشکل دارم یعنی وقتی مدلم را ران میکنم همه محدودیت های پیش نیازی رو رعایت نمیکنه.من ابتدا توی مجموعه prec1 فعالیت هایی که پیش نیاز هم هستند رو مشخص کردم و بعد با کد پایین زمان شروع فعالیت ها رو بدست اوردم که در جواب زمان شروع فعالیت ها بر اساس رعایت رابطه پیش نیازی بدست نمیاد.
    /activity /a0*a5
    ; ( alias(activity,i,j

    / prec1(i,j) precedence relations of project /a0.a1,a0.a2,a1.a3,a2.a4,a3.a5,a4.a5
    ..sum(t$(ord(t)<=card(t)),(ord(t)*s(j,l,t)))=g=smax(i$prec1(i,j),(((sum(t,ord(t)*s(i,l,t))+p(i,l
    ممنون میشم اگه منو راهنمایی کنین.

  9. سلام
    خسته نباشید
    سوالی داشتم در خصوص اینکه چطور میتونم یک محدودیت به شکل زیر رو به تابع هدف اضافه کنم؟
    (co2(i,j) .. y(i,j)=l=x(j
    ممنون میشم راهنمایی کنید.

  10. salam man y masale daram k tabe hadafam minz=x1^2+2×1+x3 hast va mahdoodiatam x1+x2<=2 maznooram ine mahdoodiatam khatiye va mahdoodiye sos noe 2 ham daram man nemidoonam vaqti mikham c yani zarybae tabe hadafao tarif konam vase x1 b tavan 2 zaribe 1 va ase x1 zaribe 2 daram nemidoanm chetor bayd in ghesmat moshakhas she tavan 2 motaghyri k y ja faqat to tabe hadaf hast va dar mahdoodiata va baghiye ghesmata tabe hadafam ba tavan 1 hast to kodom ghesmat bayd benivisam?
    va ink man sos2 variable tarif mikonam aya bayd z ra ham variable tarif konam ya dg niazi nist? va mahdodiate x ha bozorgtr mosavi sefr ham lazem ast ya na?

  11. سلام
    فرض کنید یک مجموعه کلی داریم شامل مجموعه های a برابر {a1,a2,a3 } و b برابر {b1,b2,b3,b4 } و cبرابر {c1,c2,c3,c4 } و d برابر {d1,d2,d3,d4 } که همگی در یک مجموعه به نام j قرار دارند. j برابر:
    {{a1,a2,a3 } و {b1,b2,b3,b4 } و {c1,c2,c3,c4 } و {d1,d2,d3,d4} }

    اگر در مدل محدودیت هایی وجود داشته باشه که j به ازای اجتماع a و b باشد و محدودیت دیگر j به ازای اجتماع cو d و همین طور محدودیت های دیگر j به ازای مجموعه های a و b و c و همین طور دیگر محدودیت ها …

    مثلا محدودیتی که به ازای اجتماع a و b باشد را می توان یک بار محدودیت را به ازای a و یکبار به ازای b در گمز نوشت.و راه بعد اینکه اندیس جدیدی اضافه کنیم که شامل اجتماع a و b باشد محدودیت را به ازای اندیس جدید حل کنیم.ولی چون تعداد حالات زیاد هست خیلی تعریف اندیس جدید منطقی نیست.ولی راهی هست که در هر محدودیت شرط اجتماع در خودش نوشت؟مثلا محدودیت به ازای اجتماع a و b .
    نمونه محدودیت به صورت زیر:
    Uj≤۱-Yj
    که j اندیس است و به صورت j∈a∪b است.

      • خیلی خیلی ممنون.
        بعد در ادامش یک سوال دیگه دارم.
        فرض کنید می خواهیم دو متغیر تعریف کنیم که هر دو باینری هستن.مثلا Yj به ازای مجموعه های a و b و Xj به ازای مجموعه های c و d.
        تعریف این متغیر ها چه جوری میشه؟

        • سلام
          شما باید اجتماع دو مجموعه a و b رو بگیرین، مثلا اسمش رو میذارین ab بعد y رو به صورت y(ab) تعریف میکنین و همونجوری هم بکارش ببرین، برای x هم کار مشابهی انجام بدین.
          فقط توجه کنین که اگه y باز هم ممکنه به ازای اندیسای دیگه هم برقرار باشه، باید اجتماع همه رو به جای ab بنویسین و تو محدودیت ها ریزترش کنین
          سربلند باشین

  12. با سلام
    من یک مساله جریان کارگاهی دارم که مجموعه ها به صورت مختصاتی بیان می باشد اگه میشه لطف کنید راهنمایی کنید چطور باید مجموعه ها رو در گمز باید بیان کنم.مثلا فرض کنید (i,j) یک نقطه مختصاتی است و مساله دارای نقاط مختلفی است

    • سلام با استفاده از table ! اول i و j را توسط set تعریف کنید و تعداد نقاط را در آن بگویید.
      برای مثال :
      set i/1*2/
      j/1*2/
      parameters
      .....
      table esm (i,j)
      2 1
      1 1 1
      ;0 1 1
      VA ...

      من اعداد را همین جوری دادم. شما میتونید بر اساس نیازتون داده وارد کنید.

  13. با سلام
    من یک مسئله طراحی شبکه دارم که یک مجومه راه داریم که می خواهم از بین این مجموعه راه چند زیر مجموعه بگیریم که مثلا این سه تا راه هزینه اش مثلا ۵ باشه و این ۸ تا راه هزینه اش مثلا ۱۰ باشه و الی آخر.
    برای این کار اومدم یک مجموعه I تعریف کردم که شامل مجموعه شهرهای من است و یک مجموعه j تعریف کردم که با I یکی است (alias(I,j)) . بعد اومدم مجموعه G(I,j) تعریف کردم که شامل تمام راه های ارتباطی ممکن بین شهر ها است (در حقیقت G زیر مجموعه I و j است). حالا می خواهم یک مجموعه دیگر تعریف کنم که زیر مجموعه G باشد در حقیقت می خواهم از بین راههای ارتباطی چند راه معین را مشخص کنم ولی نرم افزار این اجازه را به من نمی دهد که برای G یک زیر مجموعه تعریف کنم. لطفا راهنمایی کنید
    با تشکر

    • سلام
      در حقیقت G یه زیر مجموعه نیست. یه مجموعه دو بعدیه ترکیبیه.
      زیر مجموعه هایی که میخواین تعریف کنین (جفت ها یا مسیرها) چه قانونی دارن برا تعریفشون دقیقا؟

      • کد من به صورت زیر است /sets I ‘set of nides in the network’ /a,b,c,d,e,f,g,h
        ;alias(I,j)
        sets
        ; G(I,j)
        ;G(i,j)= yes$(not sameas(i,j))
        حالا می خواهم یک مجموعه دیگر تعریف کنم که زیر مجوعه G باشد چه کار کنم؟

      • کد من به صورت زیر است
        sets
        i set of nodes in the network /a,b,c,d,e,f,g,h,I,j/
        alias(i,j);
        sets
        G(i,j) set of links in the network ;
        G(i,j)= yes$(not sameas(i,j));
        حالا می خواهم یک مجموعه دیگر تعریف کنم که زیر مجوعه G باشد چه کار کنم؟

      • برای تعریف زیر مجموعه های مجموعه G قانون خاصی نیست فقط باید یک سری از مسیرها به صورت دستی انتخاب شوند و در یک زیر مجموعه قرار بگیرند به طوری که جمع این زیرمجموعه ها تشکیل همان مجموعه G دهد.

        • خب نیازی نیست زیر مجموعه انتخاب کنید. تنها مجموعه ای رو که میخواین رو تایپ کنین. همین. مقلا:

          set g1(i,j)/1.4,2.7/
          g2(i,j)/2.6,3.9/
          ...

  14. با عرض سلام و خسته نباشید ببخشید بنده می خواستم توی یک محدودیت سه تا اندیس به کار ببرم . با کدام دستور باید این کاررو بکنم.لطفا کدشو برام بنویسین در واقع محدودیت من به شکل زیر می باشد و اندیس هام i و j و k می باشد:
    v(i,j)-q(i,k)=e=e(i,j)

  15. سلام ، خسته نباشید
    من داخل مدلم یک مجموعه p{1,…..n} و یک مجموعه D{n+1,…..2n} و که هر درخواست بصورت یک زوج مرتب ( i, i+n) نشان داده می شود که i گره برداشت محصول و گره i+n گره تحویل محصول متناظر با ان است .که این محصولات اول به انبار می روند بعد به مشتری تحویل داده می شود که با مجموعه O{o1,o2,o3,o4} نشان داده می شود که o1 و o2 گره شروع و پایان مسیر برداشت و o3 وo4 گره شروع و پایان مسیر تحویل است . کل گره موجود در شبکه شامل N=P+D+O هستش و کل کمانهای موجود شامل
    {(i,j): i,j,< P +{o1,o2} ,ij } و {i,j<D +{o3,o4},ij :(i,j) } هستش .
    + یعنی اجتماع ، > یعنی عضو و مخالف
    چجوری میتونم اینارو اندیس گذاری کنم
    باتشکر

    • سلام
      برای شروع و پایانا نمیتونم نظری بدم. ولی برای زوج مرتب شما می تونید یه پارامتر تعریف کنین که هر وقت شرط برقرار باشه برابر یک بشه و در غیر اینصورت صفر بشه. با اندیس هم میشه.
      و ضمنا مقداری صحیح نیست همه مسئله ای که باهاش مواجه هستین رو یک باره بپرسین. این یعنی انگار من اومدم کل مجموعه رو براتون نوشتم. و اینجوری حق بقیه ضایع میشه و مقداری وقتم هم کمه. هر چند کاملا خوشحال میشم بیشتر کمک ممکن رو بهتون بکنم.

  16. سلام.
    من یه ماتریس به صورت
    (A(i,j دارم که می خوام دقیقا درایه های سطر اولش رو در یک پارامتر یک بعدی ذخیره کنم. با چه دستوری این کار رو انجام بدم؟

  17. با سلام و تشکر از سایت خیلی خوبتان-یک سوال دارم من مدل مسیریابی کمان را در گمز نوشتم وگرافم ۲۴ گره دارد حال برای نوشتن کمان ها و یال هایم باید زوج مرتب این ۲۴ گره را بنویسم که خیلی زیاد می شود چگونه باید این را در بخش مجموعه ها وارد کنم؟

    • سلام
      اگه شبکه شما کامل هست، یعنی همه با هم ارتباط دارن که نیازی به تعریف زوح مرتب ندارین و شرط هاش رو ندیده در نظر بگیرین (مگه این که شرایط دیگه ای تو مدل شما اومده باشه)
      اگه شبکه کامل نیست و رویه خاصی نداره، از مجموعه های دو بعدی استفاده کنین. (البته برای هر دو حالبت میشه از دوبعدی استفاده کرد)
      روی لینک زیر کلیک کنین.
      تعریف زوج مرتب در گمز

  18. با سلام و خسته نباشید
    من یک مسأله مسیریابی دوره ای دارم که در آن هر مشتری در طول هفته روزهای مختلفی ویزیت می شود. مثلا مشتری i روزهای شنبه و دوشنبه و مشتری j روزهای یکشنبه و سه شنبه. این پارامتر را باید به چه صورت به گمز بدهم؟ اگر در قالب table باشد باید به چه نحو تعریف شود؟

    • سلام
      اگه از table میخواین استفاده کنین که سطر ها رو مشتری، ستون ها رو روزای هفته بذارین (فرضا اسم جدول cm باشه. بعد هر جا که مشتری تو اون روز ویزیت میشه رو یک بزارین، بقیه ش هم خالی یا صفر.
      بعد اون شرطی که تو محدودیت ها در این مورد صحبت میکنه اینجوری بذارین:
      equation1(i,j)$(cm(i,j)..

  19. سلام من مجموعه های چندبعدی را مطالعه کردم ولی نتونستم مدل خود را کد کنم .ممکنه لطف کنید کد مدل زیر را بگید.تعرف مجموعه ها و نوشتن محدودیت مد نظرم هست. متشکرم
    i,j:شاخص گره ها {۰و۱و۲و…وn}
    N:مجموعه همه گره ها شامل فروشنده
    NP: مجموعه همه گره ها به جز فروشنده (گره صفر)
    A: مجموعه کمان های ساخته شده توسط گره ها{(i,j) عضوN و iمخالف j}
    i,j)∈A ∑ X ijh ≪ek-bk , ∀h)
    سیگما روی (i,j) بسته شده و علامت سیگما یکی است و h سور عمومی دارد.xijh: زمان پیمودن کمان ij با وسیله نقلیه h میباشد

    • سلام
      بهتره A رو به صورت table تعریف کنین. و ارایه هایی که کمان هست رو یک و بقیه رو صفر بذارین.

      set i/n1*n10,np1*np10/
      N(i)/n1*n10/
      np(i)/np1*np10/
      ;
      alias(i,j)
      ....
      eq(h).. sum((i,j)$A(i,j)

      مشکلی داشت خودتون ویرایشش کنین. این همه چیزیه که نیاز دارین.

  20. سلام و تشکر می کنم از راهنمایی های همیشگی تون.
    ممکنه سوال من رو بررسی کنید؟
    مجموعه هایی به این شرح دارم:
    m /1,2,3,4,5,6,7,8,9,10/
    k(m) /1,2,3,4,5/
    j(m) /6,7,8/
    w(m) /9,10/
    ولی حالا می خوام متغیری بسازم که ۱- فقط از دو اندیس w و k در ساختنش استفاده بشه (و j استفاده نشه) و ۲- اندیس های k و w استفاده شده هم تکراری نباشند (مشابه نباشند ). به نظرتون چه باید بکنم؟
    ممنون

    • سلام
      یه راه اولیه میتونه این باشه که یه اندیس به اسم kw(m) هم تعریف کنین.
      kw(m)/1*5,9*10/
      بعد k و w رو زیر مجموعه ی kw تعریف کنین و نه m

      • خیلی ممنون از پاسختون.
        در مورد تکراری نبودن اندیس ها هم در یک کامنت خوندم که استفاده از جدول رو پیشنهاد کرده بودید. به نظرتون بهترین راه همونه؟
        از راهنمایی های بی چشمداشتتون هم متشکرم.

        • خواهش میکنم.
          جدول هم میتونه استفاده بشه. ولی فکر میکنم برای شما این روش مناسبه. اگه تشخیص دادین جدول بهتره از همون استفاده کنین. تو سایزای بالا جدول به صرفه تر میتونه باشه. بستگی به ساختار مسئله داره و هیچیش قطعی نیست.

  21. باز هم سلام و عرض احترام.
    من در ندل ریاضیم نیاز دارم که در دوره های مختلف مقدار یک متغیر چک بشه و بیشترین مقدارش گزارش بشه. برای این کار از SMAX استفاده کردم. نکته جالب اینه که با اضافه کردن این محدودیت که مقدار SMAX در اون حساب میشه، مقدار تابع هدفم با قبل خیلی فرق داره. یعنی از ۴۰۰ به ۱۶۰۰ میرسه. مدلم غیرخطی هست و با سالور Bonmin حل میکنم.
    بسیار ممنون از شما

      • بله در حقیقت میشه این کار رو هم کرد و دستی این مقدار رو پس از حل مدل محاسبه کرد. برام جالب بود که چرا همچین اتفاقی میفته و مقدار تابع هدف قبل از اضافه کردن این معادله، و بعد از اون متفاوته. در هر صورت ممنونم از پاسختون.

        • بسته به مورد کاربرد متفاوت هست. یعنی ممکنه تغییری هم نکنه، ولی این عدم تغییر دلیل خواصی نداره و احتمالا صرفا یه اتفاقه.
          پس وقتی میشه بعدش انجام بدین شما.
          موفق باشید

  22. سلام، فرض کنید ما یک مجموعه ی دو بعدی مانند jn داریم که بعد اولش رو از s که ۱ و ۲ و۳ هست و بعد دومش رو از v که ۱ و ۲ هست میگیره، اعضای مجموعه ی jn بصورت ۱٫۱ و ۱٫۲ و ۲٫۱ و ۳٫۲ هست، حالا تو محدودیت ها میخوام بگم هرگاه s=1 شد آنگاه بعد دوم رو به من بده یعنی ۱ و ۲، هرگاه s=2 شد عدد ۱ رو جایگذاری کنه و هرگاه s=3 شد، عدد ۲ رو جایگذاری کنه، این رو چجوری میشه نوشت؟

    • سلام
      یعنی چی بعد دوم رو به شما بده؟ یعنی vای رو لحاظ کنه که به همون s بخوره؟ اگه اینجوریه که شرطی لازم نیست. فقط تو محدودیت بگین که به شرط jn همین.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *