Dieser Artikel ist der dritte Artikel zur Lösung des Übungsproblems des Referenztextes "Problemlösungsserie von Python: Erstellen eines Optimierungsmodells mithilfe einer Datenanalysebibliothek" zur mathematischen Optimierung.
Der erste Artikel ist unten. Bitte sehen Sie zuerst hier.
Lösen Sie das Übungsproblem des mathematischen Optimierungsmodells mit den OR-Tools von Google. (1) Das einfachste Problem der Massenfüllung https://qiita.com/ttlabo/private/7e8c93f387814f99931f
Dies ist die dritte Übung im Referenztext. Versuchen wir die folgenden Probleme sofort.
: language_balloon: Problem
ruby:7.3.Problem
Ich möchte den Gewinn maximieren, indem ich Produkte mit begrenzten Rohstoffen herstelle.
Die Rohstoffpreise und -gewinne für jedes Produkt und der Lagerbestand für jeden Rohstoff sind wie folgt.
: Frage: ** Denken **
Dieses Problem ist eines der "Probleme beim Entwurf von Logistiknetzwerken" unter den mathematischen Optimierungsproblemen, die als typische Probleme bezeichnet werden. Berücksichtigen Sie Einschränkungen und Zielfunktionen.
** Einschränkungen ** Die Problemstellung lautet: "Die Inhaltsstoffe sind begrenzt." Dies ist ein Hinweis, um die Einschränkungen zu berücksichtigen.
** Zielfunktion ** Die Gewinnmaximierung ist ein Hinweis auf die Zielfunktion.
: a: ** Antwort **
Berücksichtigen Sie die Einschränkungen. Sei x die Menge, die Produkt 1 produziert, und y die Menge, die Produkt 2 produziert. x und y nehmen positive ganzzahlige Werte an.
** Einschränkungen **
Rohstoff 1 ist auf Lager 40. Der für Produkt 1 und Produkt 2 verwendete Rohstoff 1 beträgt 40 oder weniger.
1 * x + 2 * y <= 40
Als nächstes ist Rohmaterial 2 bei 80 auf Lager. Der für Produkt 1 und Produkt 2 verwendete Rohstoff 2 beträgt 80 oder weniger.
4 * x + 4 * y <= 80
In ähnlicher Weise gilt für Rohmaterial 3 das Folgende.
3 * x + 1 * y <= 50
** Zielfunktion ** Denken Sie an Gewinne. Der Gewinn aus Produkt 1 beträgt 5,0 und der Gewinn aus Produkt 2 beträgt 4,0. Die Zielfunktion besteht darin, die Summe dieser Vorteile zu maximieren. "Gewinn = x * 5,0 + y * 4,0"
Betrachten Sie das Programm. Der Inhalt des Programms folgt im Wesentlichen dem OR-Tools-Handbuch von Google. (https://developers.google.com/optimization)
Schreiben Sie zu Beginn des Programms einen Zauber.
ruby:7.3.renshu.py
from __future__ import print_function
from ortools.linear_solver import pywraplp
Da es durch den Mixed Integer Planning Solver gelöst wird, wird es unten deklariert.
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 und y sind Bedingungen, die keine negativen Werte annehmen. Stellen Sie den Maximalwert von x und y auf 100 ein.
ruby:7.3.renshu.py
# x,Nicht negative Bedingung für y(Darf nicht negativ sein)
x = solver.IntVar(0.0, 100, 'x')
y = solver.IntVar(0.0, 100, 'y')
Definieren Sie drei Einschränkungen.
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)
Da es sich bei diesem Problem um ein Maximierungsproblem handelt, verwenden wir solver.Maximize.
ruby:7.3.renshu.py
#Gewinne maximieren
solver.Maximize(x * 5.0 + y * 4.0)
Führen Sie die Lösung aus.
7.3.renshu.py
#Lösungsausführung
status = solver.Solve()
Überprüfen Sie das Ergebnis.
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.')
Die Ergebnisse der Optimierungsberechnung sind wie folgt.
Solution: ok Objective value = 95.0 x= 15.0 y= 5.0 Time = 369 milliseconds
Sie sehen, dass wir nur 15 Produkte 1 und 5 Produkte 2 produzieren müssen. Der maximierte Gewinn beträgt 95,0.
Das ganze Programm.
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')
#Einschränkungen
solver.Add(1 * x + 2 * y <= 40)
solver.Add(4 * x + 4 * y <= 80)
solver.Add(3 * x + 1 * y <= 50)
#Gewinne maximieren
solver.Maximize(x * 5.0 + y * 4.0)
#Lösungsausführung
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.')
Dieser Artikel basiert auf den Übungen im Referenztext "Problemlösungsserie mit Python: Erstellen eines Optimierungsmodells mithilfe einer Datenanalysebibliothek" zur mathematischen Optimierung.
■ Referenztext "Problemlösungsserie von Python: So erstellen Sie ein Optimierungsmodell mithilfe einer Datenanalysebibliothek" Tsutomu Saito [Autor] Modern Science Company [Verlagswesen]
Wenn Sie Meinungen oder Korrekturen haben, lassen Sie es uns bitte wissen.
Recommended Posts