[PYTHON] Résolution d'exercices de modèle d'optimisation mathématique avec les outils OR de Google (3) Problèmes d'optimisation de la production

introduction

Cet article est le troisième article à résoudre le problème pratique du texte de référence "Série de résolution de problèmes par Python: Comment faire un modèle d'optimisation à l'aide d'une bibliothèque d'analyse de données" sur l'optimisation mathématique.

Le premier article est ci-dessous. Veuillez d'abord voir ici.

Résolvez des exercices de modèle d'optimisation mathématique avec les OU-Tools de Google (1) Le problème de remplissage de masse le plus simple https://qiita.com/ttlabo/private/7e8c93f387814f99931f

Problème d'optimisation de la production

Ceci est le troisième exercice du texte de référence. Essayons les problèmes suivants à la fois.

: speech_balloon: Problème

ruby:7.3.problème


Je veux maximiser les profits en produisant des produits avec des matières premières limitées.
Les prix des matières premières et les bénéfices pour chaque produit et l'inventaire pour chaque matière première sont les suivants.

001.jpg

: question: ** Penser **

Ce problème est l'un des "problèmes de conception du réseau logistique" parmi les problèmes d'optimisation mathématique appelés problèmes typiques. Tenez compte des contraintes et des fonctions objectives.

** Contraintes ** L'énoncé du problème dit: «Les matières premières sont limitées». C'est un indice pour considérer les contraintes.

** Fonction objective ** La maximisation du profit est un indice de la fonction objectif.

: a: ** Réponse **

Considérez les contraintes. Soit x la quantité pour produire le produit 1 et y la quantité pour produire le produit 2. x et y prennent des valeurs entières positives.

** Contraintes ** L'ingrédient 1 en a 40 en stock. La matière première 1 utilisée pour le produit 1 et le produit 2 est de 40 ou moins. 1 * x + 2 * y <= 40

Ensuite, la matière première 2 est en stock à 80. La matière première 2 utilisée pour le produit 1 et le produit 2 est de 80 ou moins. 4 * x + 4 * y <= 80

De même, pour la matière première 3, ce qui suit est vrai. 3 * x + 1 * y <= 50

** Fonction objective ** Pensez aux bénéfices. Le profit du produit 1 est de 5,0 et le profit du produit 2 est de 4,0. La fonction objective est de maximiser la somme de ces avantages. Bénéfice = x * 5,0 + y * 4,0

Considérez le programme. Le contenu du programme suit essentiellement le guide OR-Tools de Google. (https://developers.google.com/optimization)

Écrivez un sort au début du programme.

ruby:7.3.renshu.py


from __future__ import print_function
from ortools.linear_solver import pywraplp

Puisqu'il est résolu par le solveur de planification d'entiers mixtes, il est déclaré ci-dessous.

ruby:7.3.renshu.py


# Create the mip solver with the CBC backend.
solver = pywraplp.Solver('simple_mip_program',
                             pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)

x et y sont des conditions qui ne prennent pas de valeurs négatives. Définissez la valeur maximale de x et y sur 100.

ruby:7.3.renshu.py


# x,Condition non négative pour y(Ne doit pas être négatif)
x = solver.IntVar(0.0, 100, 'x')
y = solver.IntVar(0.0, 100, 'y')

Définissez trois contraintes.

ruby:7.3.renshu.py


solver.Add(1 * x + 2 * y <= 40)
solver.Add(4 * x + 4 * y <= 80)
solver.Add(3 * x + 1 * y <= 50)

Puisque ce problème est un problème de maximisation, nous utiliserons le solveur.

ruby:7.3.renshu.py


#Maximisez vos profits
solver.Maximize(x * 5.0 + y * 4.0)

Exécutez la solution.

7.3.renshu.py


#Exécution de la solution
status = solver.Solve()

Vérifiez le résultat.

7.3.renshu.py


if status == pywraplp.Solver.OPTIMAL or status == pywraplp.Solver.FEASIBLE:
    print('Solution:')
    print('ok')
    print('Objective value =', solver.Objective().Value())
    if x.solution_value() > 0.5:
        print('x=',x.solution_value())
        print('y=',y.solution_value())
    print("Time = ", solver.WallTime(), " milliseconds")
else:
    print('The problem does not have an optimal solution.')

Les résultats du calcul d'optimisation sont les suivants.

Solution: ok Objective value = 95.0 x= 15.0 y= 5.0 Time = 369 milliseconds

Vous pouvez voir que nous n'avons besoin que de 15 produits 1 et 5 produits 2. Le profit maximisé est de 95,0.

L'ensemble du programme.

7.3.renshu.py


from __future__ import print_function
from ortools.linear_solver import pywraplp

# Create the mip solver with the CBC backend.
solver = pywraplp.Solver('simple_mip_program',
    pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)

x = solver.IntVar(0.0, 100, 'x')
y = solver.IntVar(0.0, 100, 'y')

#Contraintes
solver.Add(1 * x + 2 * y <= 40)
solver.Add(4 * x + 4 * y <= 80)
solver.Add(3 * x + 1 * y <= 50)


#Maximisez vos profits
solver.Maximize(x * 5.0 + y * 4.0)

#Exécution de la solution
status = solver.Solve()

if status == pywraplp.Solver.OPTIMAL or status == pywraplp.Solver.FEASIBLE:
    print('Solution:')
    print('ok')
    print('Objective value =', solver.Objective().Value())
    if x.solution_value() > 0.5:
        print('x=',x.solution_value())
        print('y=',y.solution_value())
    print("Time = ", solver.WallTime(), " milliseconds")
else:
    print('The problem does not have an optimal solution.')

Exposition

Cet article est basé sur les exercices décrits dans le texte de référence «Série de résolution de problèmes avec Python: Comment créer un modèle d'optimisation à l'aide d'une bibliothèque d'analyse de données» sur l'optimisation mathématique.

■ Texte de référence "Série de résolution de problèmes par Python: Comment créer un modèle d'optimisation à l'aide d'une bibliothèque d'analyse de données" Tsutomu Saito [Auteur] Modern Science Company [édition]

001.jpg

Opinions etc.

Si vous avez des opinions ou des corrections, veuillez nous en informer.

Recommended Posts

Résolution d'exercices de modèle d'optimisation mathématique avec les outils OR de Google (3) Problèmes d'optimisation de la production
Résolvez des exercices de modèle d'optimisation mathématique avec les outils OR de Google
Résolvez le problème des 4 couleurs grâce à l'optimisation des combinaisons
Résolution des problèmes de sac à dos avec les outils OR de Google - Pratiquer les bases des problèmes d'optimisation combinée
Résolution des problèmes de planification des infirmières grâce à l'optimisation des combinaisons
Résolution des problèmes d'organisation des districts scolaires grâce à l'optimisation des combinaisons
Optimisation apprise avec OR-Tools [Planification linéaire: modèle en plusieurs étapes]
Introduction à l'optimisation mathématique Python Résoudre des problèmes de mathématiques au collège avec pulp
Optimisation de la planification de la production (OU-Tools)
Optimisation apprise avec OR-Tools Part0 [Introduction]
Résolution de la théorie des jeux avec l'optimisation des combinaisons
Explication du modèle d'optimisation de la production par Python
Points à noter lors de la résolution de problèmes DP avec Python