سائلیب/باب 20

ویکی کتب سے

لکیری پروگرامنگ کی ایک مثال سائلیب کی مدد سے حل کرتے ہیں۔ وکیپیڈیا پر یہ مثال ہم نے گراف کی مدد سے حل کی تھی۔

مثال 1[ترمیم]

ایک کاشتکار کے پاس 10 ایکڑ زمین ہے جس پر وہ مٹر اور گاجر کی فصل کاشت کرنا چاہتا ہے۔ مٹر کی فصل میں ہر ایکڑ کے لیے 2 میٹرک ٹن کھاد درکار ہوتی ہے جبکہ گاجر کی فصل کے لیے 1 میٹرک ٹن فی ایکڑ۔ فرض کرو کہ کاشتکار کو صرف 12 میٹرک ٹن کھاد دستیاب ہے۔ اب منڈی میں مٹر کی فی ایکڑ پیداوار کے 9 ہزار روپے ملتے ہیں جبکہ گاجر کی ایک ایکڑ پیداوار کے 4 ہزار روپے۔ ہمیں یہ ڈھونڈنا ہے کہ کتنے ایکڑ پر مٹر اُگائے جائیں اور کتنے پر گاجر تاکہ کاشتکار کو زیادہ سے زیادہ آمدنی ہو۔

فرض کرو کہ گاجر x ایکڑ پر کاشت کی جاتی ہے اور مٹر y ایکڑ پر۔ اب چونکہ کل رقبہ 10 ایکڑ ہے، اس لیے

کھاد مٹرکو 2 میٹرک ٹن فی ایکڑ، اور گاجر کو 1 میٹرک ٹن فی ایکڑ۔ جبکہ کاشتکار کے پاس کھاد کی ساری مقدار 12 میٹرک ٹن ہے، اس لیے

اس کے علاوہ چونکہ زیر کاشت رقبہ منفی نہیں ہو سکتا، اس لیے

مٹر کی قیمت 9 ہزار فی ایکڑ اور گاجر کی قیمت 4 ہزار فی ایکڑ کے حساب سے کاشتکار کی آمدنی ہو گی

جسے وہ زیادہ سے زیادہ کرنا چاہتا ہے۔

سائلیب میں یہ مسئلہ linpro کی مدد سے حل کیا جاتا ہے۔ منافع فنکشن کے لیے ہم لکھتے ہیں:

--> p = [ 4 ; 9]
p =
    4
    9

تو منافع فنکشن یہ ہوئی (میٹرکس صورت میں)

اب نامساوات کو میٹرکس صورت یوں لکھ کر

یا

جو سائلیب کی زبان میں یوں کہہ سکتے ہیں

--> C = [ 1  1; 1 2];
--> b = [ 10 ; 12];

اب سائلیب کو بتاتے ہیں کہ x اور y کی کم سے کم (min) اور زیادہ سے زیادہ (max) قیمت کیا ہو سکتی ہے:

--> cmin = [ 0 ; 0];
--> cmax = [ 10 ; 10];

چونکہ سائلیب linpro منافع فنکشن کی بجائے نقصان فنکشن استعمال کرتی ہے اس لیے ہم اسے منفی p بتاتے ہیں۔ آخری صفر کا مطلب ہے کہ C, b میں سب نامساوات ہیں (مساوات کوئی نہیں)

--> [X, lag, f] = linpro(-p, C, b, cmin, cmax, 0)
--> f =
    -54
    X =
       0
       6

تو جواب یہ آیا

یعنی گاجر کاشت نہ کی جائے، اور مٹر چھ ایکڑ پر کاشت کیا جائے۔ اور منافع ہو گا 54 ہزار۔


مثال 3 کے لیے لکیری پروگرامنگ میں ثنویت کی تعریف ملاحظہ کریں۔

مثال 3[ترمیم]

اوپر مثال 1 میں مقدم مسئلہ کو یوں لکھا جا سکتا ہے

تکبیر
جبکہ

اب ثنوی مسئلہ کو یوں سمجھا جا سکتا ہے۔ فرض کرو کہ کوئی شخص کاشتکار سے ساری کھاد (بارہ میٹرک ٹن) خریدنا چاہتا ہے اور زمیں (دس ایکڑ) فصل کے دورانیہ کے لیے کرائے پر لینا چاہتا ہے۔ اب اس شخص کا مسئلہ یہ ہو گا کہ کاشتکار کو کیا قیمت کی پیشکش کرے۔ یہ شخص ایک ایکڑ کے کرائے کی قیمت روپے لگاتا ہے، اور کھاد کی فی میٹرک ٹن قیمت روپے لگاتا ہے، تو پوری قیمت یہ بنی

ظاہر ہے کہ یہ شخص کم سے کم قیمت لگانا پسند کرے گا۔

چونکہ ایک ایکڑ زمین اور ایک میٹرک ٹن کھاد کے استعمال سے چار ہزار روپے مالیت کی گاجر پیدا ہوتی ہے، اس لیے کاشتکار یہ سودا اسی وقت قبول کرے گا جبکہ

اور چونکہ ایک ایکڑ زمین اور دو میٹرک ٹن کھاد کے استعمال سے نو ہزار روپے مالیت کا مٹر پیدا ہوتا ہے، اس لیے کاشتکار یہ سودا اسی وقت قبول کرے گا جبکہ

تو ثنوی لکیری پروگرامنگ مسئلہ یہ بنا

تصغیر
جبکہ

سائلیب میں اس کا حل یوں نکلے گا۔

--> p = [ 4 ; 9]
p =
    4
    9
--> C = [ 1  1; 1 2];
--> b = [ 10 ; 12];
--> cmin = [ 0 ; 0];
--> cmax = [ 10 ; 10];

اب چونکہ linpro کو نامساوات کی "کم" صورت چاہیے، اس لیے ہم C اور b کو منفی لکھیں گے۔ یعنی

چونکہ g نقصان فنکشن ہی ہے، اس لیے p کو مثبت ہی رہنے دیں گے

--> [Y, lag, g] = linpro(p, -C, -b, cmin, cmax, 0)
--> g =
    54
    Y =
       0
       4.5

اس مسئلہ کا حل یہ نکالا کہ کل قیمت 54 ہزار ہی نکلے گی، اور ، ۔ یعنی اپنی دانست میں یہ شخص کھاد کی قیمت ساڑھے چار پزار روپے فی میٹرک ٹن لگائے، اور زمین کا کرایہ صفر۔