idea worker - fikir işçisi


PYTHON PULP İÇİN SON YAZI: DEĞİŞKENLERİN LpContinuous OLARAK TANIMLANMASI

19.08.2019 02:48

Python Pulp ile son yazımı ekliyorum ve bu konuda başka yazı eklemek istemiyorum. İç denetim ve doğrusal programlama için yazılar eklersem, farklı bir konu olduğunu düşüneceğim. Bu yazıyı şimdi ekliyorum, çünkü diğer yazılarda değişkenleri LpInteger (tam sayı) olarak tanımladık, ama değişkenlerin her zaman tam sayı olması zorunlu değil ki... 

 

 

Aşağıda bir Maximization probleminin çerçevesi mevcut. Sayın İbrahim Küçükkoç tarafından internete eklenmiş ve Solver ile çözülmüş. Bu devirde herkesin Python öğrenmesini savunduğum için, Pulp ile çözüyorum:)

 

MAX ÖRNEĞİ

 

Ürün 1

Ürün 2

Ürün 3

Ürün 4

 

Kısıt

Kaynak 1

50

50

100

50

 

5800

Kaynak 2

5

15

10

5

 

730

Kaynak 3

500

400

300

200

 

29200

Kaynak 4

500

750

250

500

 

60500

 

 

 

 

 

 

 

Satış Bedeli

450

1150

800

400

 

 

 

 

 

 

 

 

 

Kar Max İçin Üretim Hedefi 

X1

X2

X3

X4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Amaç Fonksiyonu Max 450X1 + 1150X2 + 800X3 + 400X4

 

 

 

 

 

 

 

Kısıtlar

 

 

 

 

 

 

50X1 + 50X2 + 100X3 + 50X4 =< 5800

 

 

5X1 + 15X2 + 10X3 + 5X4 =< 730

 

 

500X1 + 400X2 + 300X3 + 200X4 =< 29200

 

 

500X1 +750X2 + 250X3 + 500X4 =< 60500

 

 

X1 , X2 , X3 , X4 >= 0

 

 



Pulp ile kodlar aşağıdadır. Değişkenleri LpContinuous olarak tanımladığımı özellikle belirtmek istiyorum.

 

from pulp import *
 
 
kar_max = LpProblem("Profit maximization" , LpMaximize)
 
 
X1 = LpVariable("X1 adet" , 0 , None , LpContinuous)
 
X2 = LpVariable("X2 adet" , 0 , None , LpContinuous)
 
X3 = LpVariable("X3 adet" , 0 , None , LpContinuous)
 
X4 = LpVariable("X4 adet" , 0 , None , LpContinuous)
 
 
 
kar_max += 450*X1 + 1150*X2 + 800*X3 + 400*X4
 
 
kar_max += 50*X1 + 50*X2 + 100*X3 + 50*X4 <= 5800 , "Kısıt 1"
 
kar_max += 5*X1 + 15*X2 + 10*X3 + 5*X4 <=  730 , "Kısıt 2"
 
kar_max += 500*X1 + 400*X2 + 300*X3 + 200*X4 <=  29200 , "Kısıt 3"
 
kar_max += 500*X1 +750*X2 + 250*X3 + 500*X4 <= 60500 , "Kısıt 4"
 
 
 
kar_max.solve()
 
 
print ("Status:" , LpStatus[kar_max.status])
 
 
for v in kar_max.variables():
    print(v.name, "=" , v.varValue)
 
 
amac = value(kar_max.objective)
 
print("Max kar = " + str(amac))
from pulp import *
 
 
kar_max = LpProblem("Profit maximization" , LpMaximize)
 
 
X1 = LpVariable("X1 adet" , 0 , None , LpContinuous)
 
X2 = LpVariable("X2 adet" , 0 , None , LpContinuous)
 
X3 = LpVariable("X3 adet" , 0 , None , LpContinuous)
 
X4 = LpVariable("X4 adet" , 0 , None , LpContinuous)
 
 
 
kar_max += 450*X1 + 1150*X2 + 800*X3 + 400*X4
 
 
kar_max += 50*X1 + 50*X2 + 100*X3 + 50*X4 <= 5800 , "Kısıt 1"
 
kar_max += 5*X1 + 15*X2 + 10*X3 + 5*X4 <=  730 , "Kısıt 2"
 
kar_max += 500*X1 + 400*X2 + 300*X3 + 200*X4 <=  29200 , "Kısıt 3"
 
kar_max += 500*X1 +750*X2 + 250*X3 + 500*X4 <= 60500 , "Kısıt 4"
 
 
 
kar_max.solve()
 
 
print ("Status:" , LpStatus[kar_max.status])
 
 
for v in kar_max.variables():
    print(v.name, "=" , v.varValue)
 
 
amac = value(kar_max.objective)
 
print("Max kar = " + str(amac))
 
 
 
Kodları çalıştırdığımızda, elde ettiğimiz sonuçlarsa şunlar:
 
 
Status: Optimal
X1_adet = 23.0
X2_adet = 15.0
X3_adet = 39.0
X4_adet = 0.0
Max kar = 58800.0
 

—————

Geri