Coloration de tableau basée sur MILP à l'aide de Pyomo (tutoriel avec code source)

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).

Veuillez ajouter une description de l'image
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 :

insérez la description de l'image ici

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

Guess you like

Origin blog.csdn.net/iCloudEnd/article/details/131157634