Giriş
Tamsayılı doğrusal programlama için bir çözücü yaz .
Meydan okuma
Göreviniz tamsayılı doğrusal programlama (ILP) için bir çözücü yazmaktır. ILP'de, bilinmeyenler dizisinin (tümü tam sayı olan) doğrusal eşitsizlikleri verilir ve amaç, doğrusal bir işlevin minimum veya maksimumunu bulmaktır.
Örneğin, eşitsizlikler için ( Karışık Tamsayılı Doğrusal Programlama'dan alınan örnek )
4x+2y-15≤0
x+2y- 8≤0
x+ y- 5≤0
- x ≤0
- y ≤0
ve amaç fonksiyonu 3x+2y
, amaç fonksiyonunun azami değeri 12
( x=2,y=3
), asgari 0
( x=y=0
) olmalıdır .
Girdi, 2d dizisi (veya standart özellikleri takip eden herhangi bir eşdeğer) olarak verilir; her satır, son satır hariç, bir eşitsizliğe karşılık gelir. Dizideki sayılar katsayılardır ve ≤0
kısım daima ihmal edilir. Varsa n
her satırda elemanları, orada demektir n-1
bilinmeyenler.
Dizinin son satırı doğrusal fonksiyona karşılık gelir. Katsayılar listelenir.
Örneğin, yukarıdaki sorunun giriş dizisi
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,0]].
Çıktı, makul herhangi bir biçimde verilen minimum ve maksimum olmalıdır.
Aşağıdaki problem için (kısıtlamalardan iki tanesi yukarıdaki problemden uzaklaştırılmıştır):
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]].
Maksimum değer hala var 12
, ancak minimum mevcut değil ve amaç işlevi keyfi (mutlak değer anlamında) negatif değerlere sahip olabilir. Bu durumda, programın 12
cevaplayıcı tarafından karar verilen sahte bir değeri takiben çıktı vermesi gerekir . Başka bir örnek ise, örneğin hiçbir çözüm bulunmamasıdır.
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]].
Bu durumda, sahte değerler de verilmelidir. Amaç işlevi için "optimal değer" in sonsuzluk olduğu durumunun ve çözüm bulunmadığı durumun anlaşılması iyi olur, ancak bu gerekli değildir.
Girdi yalnızca hem eşitsizlikler hem de amaç işlevi için tamsayı katsayıları içerir. Tüm bilinmeyenler de tam sayıdır. Eşitsizliklerin katsayısı matrisinin tam dereceye sahip olması garanti edilir.
Test Kılıfları
@KirillL'e teşekkür ederiz. Orijinal test setinde bir hata bulmak ve ILP sorunlarını anlamamı derinleştirmek için.
Input
Output
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,1]]
[1,13]
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]]
[-inf, 12]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]]
[NaN, NaN]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[5,5,5,5,6,7]]
[55, inf]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[0,0,0,0,0,4]]
[4, 4]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[0,0,4]]
[NaN, NaN]
gözlük
İstisna işleme konusunda endişelenmenize gerek yok.
Bu kod-golf , en düşük bayt sayısı kazanır.
Bilinmeyenlerin Maksimal sayısı:
9
. Eşitsizliklerin Maksimal sayısı:12
.Herhangi bir standart form aracılığıyla girdi alabilir ve çıktı alabilirsiniz ve formatı seçmekte özgürsünüz.
Her zamanki gibi burada varsayılan boşluklar geçerlidir.