Une bibliothèque pour la modélisation d'optimisation mathématique. Des solveurs tels que «Gurobi», «CBC» et «GLPK» peuvent être utilisés. Je ne connais pas grand-chose à l'optimisation, je prévois donc d'étudier à l'avenir.
La procédure pour résoudre un problème avec un modèle mathématique est la suivante.
LpProblem(name='NoName', sense=LpMinimize)
--name
: nom du modèle mathématique. La valeur par défaut est «NoName».
--sense
: Soit minimiser (LpMinimize), soit maximiser (LpMaximize).
LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
--name
: nom de la variable
-- lowBound
: limite inférieure
--ʻUpBound: limite supérieure --
cat`: type de variable
LpContinuous
: variable continueLpInteger
: variable entièreLpBinary
: variables binairesPeut être créé comme " x + 2 * y
"en utilisant des variables
Il est également possible d'ajouter des termes à l'expression ultérieurement
Spécifiez la fonction objectif comme "m + = expression
" (cependant, m
est un modèle mathématique)
Peut être créé à l'aide de variables telles que " x + y <= 1
"
Il est également possible d'ajouter un terme plus tard sur le côté gauche de la contrainte
Les contraintes sont spécifiées comme " m + = expression <= côté droit
"
Des fonctions qui semblent souvent utilisées
value ()
: Récupère la valeur de la variable
lpSum ()
: trouve la somme des termes
lpDot ()
: trouve le produit interne de deux listes
La feuille de triche est ici
Mettez autant d'articles que possible dans un sac à dos puis:
Il y a des restrictions comme. Donc que fais-tu?
Insérez l'élément $ s_i $ → $ v_i = 1 $ Ne pas mettre l'élément $ s_i $ → $ v_i = 0 $
\begin{array}{cl}
\max & \sum_i{s_i \ v_i} \\
\mbox{subject to} & \sum_i{s_i \ v_i} \leq C \\
& v_i \in \{0, 1\} ~ \forall i
\end{array}
>>> #Le poids de l'article
>>> s = [128, 108, 34, 53, 71, 224, 299, 181, 336, 15]
>>> #Capacité de charge maximale du sac à dos
>>> C = 600
>>> #Préparation de la bibliothèque
>>> from pulp import LpProblem, LpVariable, LpMaximize, LpBinary
>>> rn = range(len(s))
>>> #Préparation du modèle
>>> m = LpProblem('knapsack', LpMaximize)
>>> #variable(0 s'il faut inclure le i-ème élément/1)
>>> v = [LpVariable('v%d' % i, cat = LpBinary) for i in rn]
>>> #Fonction objective
>>> m += lpDot(s, v)
>>> #Contrainte
>>> m += lpDot(s, v) <= C
>>> #résoudre
>>> m.solve()
>>> #production
>>> print(LpStatus[m.status], sum(s[i] * value(v[i]) for i in rn))
>>> print([s[i] for i in rn if value(v[i]) > 0.5])
Optimal 600.0
[108, 34, 53, 224, 181]
D'autres problèmes d'optimisation peuvent être résolus en formulant (comme)
Le problème de la sélection de p parmi les installations candidates et de la minimisation de la distance totale entre le point de demande et l'installation
Exemple
\begin{array}{cl}
\min & \sum_i{\sum_j{d_{ij} \ x_{ij}}} ~ ~ ~ ~ (1) \\
\mbox{subject to} & \sum_i{y_i} = p ~ ~ ~ ~ (2) \\
& \sum_i{x_{ij}} = 1 ~ \forall j ~ ~ ~ ~ (3) \\
& x_{ij} \leq y_i ~ \forall i, j ~ ~ ~ ~ (4) \\
& x_{ij} \in \{0, 1\} ~ \forall i, j
\end{array}
C'est courant.
\begin{array}{cl}
\min & \mbox{no objective function} \\
\mbox{subject to} & \sum_k{v_{ijk}} = 1 ~ \forall i, j ~ (1)\\
& \sum_k{v_{ikj}} = 1 ~ \forall i, j ~ (2) \\
& \sum_k{v_{kij}} = 1 ~ \forall i, j ~ (3) \\
& 3\Il en va de même pour les carrés des temps3~ (4) \\
& v_{ijk} \in \{0, 1\} ~ \forall i, j, k
\end{array}
Coucou | Noguramu | Musée | Lien numérique | Calcul masqué |
---|---|---|---|---|
Les inégalités | Puzzle de construction | Logique murale | Effet d'entraînement | Numéro squelette |
Lien Serpentard | Couper en carrés | Masyu | Construire un pont | Colle colle |
Puzzle de bloc | Peinture pour carrelage | Salle des facteurs | Où noir | Puzzle de raisonnement |
Laisse-moi tranquille | Pourquoi | Zone de peinture | Quelques rouleaux | Lien de tuyau |
Ruisseau | brûlure de glace | Thumbline | route de campagne | Kanaole |
Philmat | Shaka Shaka | Yajirin | Coloration | Poutre de luciole |
Vitrail | Satogaeri | squelette | Nom cité de Nicoli |
Recommended Posts