Chiziqli dasturlash masalasining matematik modeli
1. O'zgaruvchilarni aniqlash:
xxx: birinchi klass chiptalar soni
yyy: ekonom-klass chiptalar soni
2. Maqsad funksiyasi:
Aviakompaniya foydasini maksimal qilish kerak. Foyda quyidagicha aniqlanadi:
Birinchi klass chipta narxi: 400 AQSH dollar
Ekonom-klass chipta narxi: 300 AQSH dollar
Maqsad funksiyasi: MaksimalZ=400x+300y\text{Maksimal} \quad Z = 400x + 300yMaksimalZ=400x+300y
3. Chegaraviy shartlar:
Samolyotda jami yo'lovchilar soni 200 tadan oshmasligi kerak: x+y≤200x + y \leq 200x+y≤200
Birinchi klass uchun kamida 20 ta joy ajratilishi kerak: x≥20x \geq 20x≥20
Ekonom-klassdagi yo'lovchilar soni birinchi klass yo'lovchilar sonidan 4 marta ko'p bo'lishi kerak: y=4xy = 4xy=4x
Manfiy bo'lmagan shartlar: x≥0x \geq 0x≥0 y≥0y \geq 0y≥0
4. Masalaning chiziqli dasturlash modeli:
MaksimalZ=400x+300y\text{Maksimal} \quad Z = 400x + 300yMaksimalZ=400x+300y shartlar\text{shartlar}shartlar x+y≤200x + y \leq 200x+y≤200 x≥20x \geq 20x≥20 y=4xy = 4xy=4x x≥0x \geq 0x≥0 y≥0y \geq 0y≥0
Simpleks usuli yordamida yechish
Simpleks usuli bilan yechish uchun birinchi navbatda tenglamalar tizimini standarti ko'rinishga keltirish kerak. Ushbu masalada tenglamani tizim sifatida yozamiz va qo'shimcha o'zgaruvchi kiritamiz.
Chegaraviy shartni standart ko'rinishga keltirish: x+y≤200x + y \leq 200x+y≤200
Bu tenglamani tenglikka aylantirish uchun qo'shimcha o'zgaruvchi sss (slack variable) kiritamiz: x+y+s=200x + y + s = 200x+y+s=200
Maqsad funksiyasini maksimal qilish uchun Simpleks jadvalini tuzamiz.
Simpleks jadvali:
Simpleks jadvalini tuzish va yechish uchun quyidagi Python kodidan foydalanamiz:
Dastur kodi:
# -*- coding: utf-8 -*-
"""
Created on Fri May 31 18:53:28 2024
@author: kamoliddin
"""
from scipy.optimize import linprog
# Maqsad funksiyasi koeffitsiyentlari (salbiy ko'paytirilgan, chunki scipy linprog minimalizatsiyani amalga oshiradi)
c = [-400, -300]
# Chegaraviy shartlar koeffitsiyentlari
A = [
[1, 1],
[-1, 0],
[-4, 1]
]
# Chegaraviy shartlar tenglamasi
b = [200, -20, 0]
# Simpleks usuli yordamida yechish
result = linprog(c, A_ub=A, b_ub=b, bounds=(0, None), method='simplex')
# Natijalarni chiqarish
print(f"Birinchi klass chiptalari soni (x): {result.x[0]}")
print(f"Ekonom-klass chiptalari soni (y): {result.x[1]}")
print(f"Maksimal foyda (Z): {-result.fun}")
Natija:
Natijalar:
Ushbu dastur orqali biz birinchi va ekonom-klass chiptalari sonini hamda maksimal foydani aniqlashimiz mumkin. Dasturda scipy kutubxonasidagi linprog funksiyasi yordamida chiziqli dasturlash masalasini Simpleks usulida yechamiz.
Xulosa:
Ushbu masala chiziqli dasturlash masalasining standart ko'rinishiga keltirildi va Simpleks usuli yordamida yechildi. Natijada, aviakompaniya foydasini maksimal qilish uchun har bir klassdan qancha chipta sotishi kerakligi aniqlandi.
|