introduzione
Scrivi un solutore per la programmazione lineare intera .
Sfida
Il tuo compito è scrivere un risolutore per la programmazione lineare intera (ILP). Nell'ILP vengono fornite le disuguaglianze lineari di un insieme di incognite (che sono tutti numeri interi) e l'obiettivo è trovare il minimo o il massimo di una funzione lineare.
Ad esempio, per le disuguaglianze (esempio tratto dalla Programmazione lineare di numeri interi misti )
4x+2y-15≤0
x+2y- 8≤0
x+ y- 5≤0
- x ≤0
- y ≤0
e la funzione obiettivo 3x+2y, il massimo della funzione obiettivo dovrebbe essere 12( x=2,y=3), mentre il minimo dovrebbe essere 0( x=y=0).
L'input è dato come un array 2d (o qualsiasi equivalente secondo le specifiche standard), ogni riga corrisponde a una disuguaglianza, ad eccezione dell'ultima riga. I numeri nella matrice sono i coefficienti e la ≤0parte viene sempre omessa. Se ci sono nelementi in ogni riga, significa che ci sono n-1incognite.
L'ultima riga dell'array corrisponde alla funzione lineare. I coefficienti sono elencati.
Ad esempio, l'array di input per il problema sopra è
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,0]].
L'output dovrebbe essere il minimo e il massimo, dato in qualsiasi forma ragionevole.
Per il seguente problema (due delle restrizioni sono state rimosse dal problema precedente):
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]].
Il massimo è ancora 12, ma il minimo non esiste e la funzione obiettivo può avere valori negativi arbitrariamente grandi (nel senso del valore assoluto). In questo caso, il programma dovrebbe essere emesso 12, seguendo un valore errato che viene deciso dal risponditore. Un altro caso è che non esiste alcuna soluzione, ad esempio,
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]].
In questo caso, dovrebbero essere emessi anche valori falsi. Sarebbe bello discernere il caso in cui il "valore ottimale" per la funzione obiettivo è l'infinito e il caso in cui non esistono soluzioni, ma ciò non è necessario.
L'input contiene solo coefficienti interi sia per le disuguaglianze sia per la funzione obiettivo. Tutte le incognite sono anche numeri interi. La matrice dei coefficienti delle disuguaglianze è garantita per avere il grado completo.
Casi test
Ringraziamo @KirillL. per trovare un bug nella suite di test originale e approfondire la mia comprensione dei problemi ILP.
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]
Specifiche
Non è necessario preoccuparsi della gestione delle eccezioni.
Questo è code-golf , vince il numero più basso di byte.
Numero massimo di incognite:
9. Numero massimo di disuguaglianze:12.Puoi prendere input e fornire output attraverso qualsiasi modulo standard e sei libero di scegliere il formato.
Come al solito, qui si applicano scappatoie predefinite .