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. Zur Vorbereitung benötigen Sie Pandas, Fruchtfleisch, 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 "Entwerfen einer effektiven Methode unter Verwendung genetischer Programmierung für das Problem der Verlagerung von Krankenwagen" verwenden. Lass es uns bekommen. In der Arbeit handelt es sich um ein Problem bei der Verlagerung von Krankenwagen, aber hier konzentrieren wir uns auf das Problem der Platzierung von Krankenwagen.
Platzieren Sie Krankenwagen in mehreren Bereichen. Die Kapazität und der Bedarf, die zugewiesen werden können, werden für jede Region festgelegt. Außerdem muss die Bewegung innerhalb von 10 Minuten erfolgen. Minimieren Sie zu diesem Zeitpunkt die Gesamtfahrzeit.
[p-Median Problem](http://www.orsj.or.jp/~wiki/wiki/index.php/P-%E3%83%A1%E3%83%87%E3%82%A3%E3 % 82% A2% E3% 83% B3% E5% 95% 8F% E9% A1% 8C) Lösen wir es also schnell.
Erstellen Sie zunächst zufällige Daten.
python
import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
n = 3 #Anzahl der Regionen
rn = range(n)
np.random.seed(2)
tm = (np.random.rand(n, n) * 20).round(0)
tm[np.diag_indices(n)] = 0
tm #Reisezeit(Protokoll)
>>>
array([[ 0., 1., 11.],
[ 9., 0., 7.],
[ 4., 12., 0.]])
python
cap = np.random.randint(2, 5, n)
cap #Kapazität
>>>
array([4, 2, 2])
python
dem = np.random.randint(2, 4, n)
dem #Nachfrage
>>>
array([2, 3, 3])
Erstellen Sie eine Variablentabelle. Erstellen Sie zu diesem Zeitpunkt keine Variablen mit einer Laufzeit von 10 Minuten oder mehr.
python
a = pd.DataFrame(((i,j,dist[i,j]) for i in rn for j in rn
if dist[i,j]<=10), columns=['From', 'To', 'Tm'])
a['Var'] = addvars(len(a))
a[:3]
From | To | Tm | Var | |
---|---|---|---|---|
0 | 0 | 0 | 0.0 | v1 |
1 | 0 | 1 | 1.0 | v2 |
2 | 1 | 0 | 9.0 | v3 |
Formulieren und lösen wir es.
python
m = LpProblem()
m += lpDot(a.Tm, a.Var)
for i, t in a.groupby('From'):
m += lpSum(t.Var) <= cap[i]
for i, t in a.groupby('To'):
m += lpSum(t.Var) >= dem[i]
m.solve()
a['Val'] = a.Var.apply(value)
a[a.Val > 0]
From | To | Tm | Var | Val | |
---|---|---|---|---|---|
0 | 0 | 0 | 0.0 | v1 | 2.0 |
1 | 0 | 1 | 1.0 | v2 | 2.0 |
3 | 1 | 1 | 0.0 | v4 | 1.0 |
4 | 1 | 2 | 7.0 | v5 | 1.0 |
6 | 2 | 2 | 0.0 | v7 | 2.0 |
das ist alles
Recommended Posts