Considérons un échiquier de taille n*n. Nous pouvons peindre chaque cellule en noir ou en blanc.
L'objectif est de minimiser le nombre de lignes avec toutes les cellules de couleur similaire. Le schéma ci-dessous montre le câblage possible pour une carte 3*3 (8 fils).
Nous savons également que 4 d'entre eux doivent être blancs (et 5 doivent être noirs).
Ça a l'air facile ? Comment exprimons-nous cela en tant que MILP ?
Formulation du modèle :
La première étape consiste à identifier la ligne et les cellules (Li) qui se trouvent sur la ligne.
Fonction objective : La somme de toutes les lignes blanches ou noires
Le nombre de globules blancs doit être [n/2]
Wl est égal au produit de tous les xi sur cette ligne (3,4) pour la linéariser. Wl =1 signifie que toutes les cellules sont blanches (xi=1)
Bl est égal au produit de tous (1-xi) sur cette ligne (5,6), utilisé pour la linéariser. Bl =1 signifie que toutes les cellules sont noires (xi=0)
Les variables binaires Bl et Wl indiquent si la ligne est entièrement noire ou entièrement blanche
Code Pyomo
n = N**2
model = AbstractModel()
model.N =Param(mutable=True, default=n)
model.i = RangeSet(n)
model.j = Set(initialize=model.i)
model.l = RangeSet(len(new_lines))
model.W = Var(model.l, bounds