[PYTHON] Lösen mathematischer Optimierungsmodellübungen mit den OR-Tools von Google (3) Probleme bei der Produktionsoptimierung

Einführung

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

Produktionsoptimierungsproblem

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.

001.jpg

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

Ausstellungsstück

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]

001.jpg

Meinungen etc.

Wenn Sie Meinungen oder Korrekturen haben, lassen Sie es uns bitte wissen.

Recommended Posts

Lösen mathematischer Optimierungsmodellübungen mit den OR-Tools von Google (3) Probleme bei der Produktionsoptimierung
Lösen Sie mathematische Optimierungsmodellübungen mit den OR-Tools von Google (4) Lösen Sie Zahlenstellen
Lösen Sie ein 4-Farben-Problem mit Kombinationsoptimierung
Lösen von Rucksackproblemen mit den OP-Tools von Google - Üben der Grundlagen von Kombinationsoptimierungsproblemen
Lösen von Planungsproblemen für Krankenschwestern mit Kombinationsoptimierung
Lösen von Problemen bei der Organisation von Schulbezirken durch Kombinationsoptimierung
Mit OR-Tools erlernte Optimierung [Lineare Planung: Mehrstufiges Modell]
Einführung in die mathematische Optimierung von Python Lösen von Mathematikproblemen der Mittelstufe mit Zellstoff
Produktionsplanungsoptimierung (OR-Tools)
Mit OR-Tools Part0 erlernte Optimierung [Einführung]
Spieltheorie mit Kombinationsoptimierung lösen
Erklärung des Produktionsoptimierungsmodells durch Python
Zu beachtende Punkte bei der Lösung von DP-Problemen mit Python