OR Society Oktoberausgabe des Magazins ["** Studenten-OR **" - Sonderfunktion](http://www.orsj.or.jp/ Aus e-library / elcorsj.html # 6110) möchte ich das Optimierungsproblem entsprechend aufgreifen und mit Python lösen. Als Vorbereitung benötigen Sie Numpy, Pulp, ortoolpy. Für die Umgebungskonstruktion [Kombinationsoptimierung verwenden](http://qiita.com/Tsutomu-KKE@github/items/bfbf4c185ed7004b5721#%E3%82%BD%E3%83%95%E3%83%88% Wir verweisen auf E3% 81% AE% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB).
Lassen Sie mich das Problem des Papiers "Analyse des Problems mit Lebensmitteldesserts in Nagasaki City" verwenden.
Platzieren Sie ein frisches Lebensmittelgeschäft für alle und minimieren Sie die Anzahl der Plätze. Die Öffentlichkeit muss sich innerhalb von 5000 m und ältere Menschen innerhalb von 1500 m befinden.
Problem bei der Platzierung der Einrichtung ohne Kapazitätsbeschränkungen.
Erstellen Sie zunächst zufällige Daten.
python
import numpy as np
from pulp import *
from ortoolpy import addvar, addvars
nc, n1, n2 = 4, 2, 2 #Anzahl der Kandidatenpunkte, Anzahl der allgemeinen öffentlichen Bereiche, Anzahl der älteren Bereiche
np.random.seed(2)
dist1 = np.random.randint(4000, 6000, (nc, n1))
dist1 #Entfernung vom Kandidatenpunkt zum allgemeinen öffentlichen Bereich
>>>
array([[5192, 4527],
[4493, 5608],
[5558, 4299],
[4466, 5099]])
python
dist2 = np.random.randint(1000, 2000, (nc, n1))
dist2 #Entfernung vom Kandidatenpunkt zum älteren Bereich
>>>
array([[1360, 1263],
[1674, 1433],
[1607, 1587],
[1725, 1047]])
Formulieren und lösen.
python
m = LpProblem()
x = addvars(n, cat=LpBinary) #Variable
m += lpSum(x) #Zielfunktion
for i in range(n1):
m += lpDot(dist1[i] <= 5000, x) >= 1 #Zwang
for i in range(n2):
m += lpDot(dist2[i] <= 1500, x) >= 1 #Zwang
m.solve()
[int(value(v)) for v in x]
>>>
[1, 1, 0, 0]
das ist alles
Recommended Posts