Re: Array aufteilen
Verfasst: Montag 2. Juli 2018, 19:53
@Bine2706: bitte zeige Deinen vollständigen Code inklusive des Fehlers mit gesamtem Traceback. Und benutze das nächste mal die Code-Tags hier im Forum.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
from gurobipy import *
from Einlesen_Prodhon_Funktion import read_textfile
from Fahrtkosten_berechnen_Funktion import errechne_fahrtkosten_ersterStufe
from Fahrtkosten_berechnen_Funktion import errechne_fahrtkosten_zweiterStufe
from optLsg_Funktion import berechne_Crainic_drei_Indizes
#_______________________________________________________________________
##Funktion read_textfile aus der Datei Einlesen_Prodhon_Funktion, die eine Textdatei
##der Standardinstanzen von Prodhon (Link: http://prodhonc.free.fr/) einliest
data = read_textfile('coord20-5-1-2e.txt')
##Inputparametern der Funktion werden die Daten der eingelesenen Datei zugewiesen
#Inputparameter bezüglich der Plattform
plattform = data[0]
koordinaten_plattform = data[1]
kapazitaet_plattform = data[2]
fixkosten_plattform = data[3]
anzahl_plattform = data[4]
#Inputparameter bezüglich den Satelliten
satellit = data[5]
koordinaten_satellit = data[6]
kapazitaet_satellit = data[7]
fixkosten_satellit = data[8]
anzahl_satellit = data[9]
#Inputparameter bezüglich den Kunden
kunde = data[10]
koordinaten_kunde = data[11]
kundennachfrage = data[12]
anzahl_kunde = data[13]
#Inputparameter bezüglich der Menge an Standorten
standorte_ersterStufe = data[14]
koordinaten_standorte_ersterStufe = data[15]
standorte_zweiterStufe = data[16]
koordinaten_standorte_zweiterStufe = data[17]
alleStandorte = data[18]
anzahlStandorte = data[19]
#Inputparameter bezüglich der Primärfahrzeuge
primaerfahrzeug = data[19]
kapazitaet_primaerfahrzeug = data[20]
nutzungskosten_primaerfahrzeug = data[21]
anzahl_primaerfahrzeug = data[22]
#Inputparameter bezüglich der Sekundärfahrzeuge
sekundaerfahrzeug = data[23]
kapazitaet_sekundaerfahrzeug = data[24]
nutzungskosten_sekundaerfahrzeug = data[25]
anzahl_sekundaerfahrzeug = data[26]
#_______________________________________________________________________
##mit der Funktion errechne_fahrtkosten_ersterStufe aus der Datei Fahrtkosten_berechnen_Funktion,
##werden die Fahrtkosten der ersten Stufe berechnet
fahrtkosten_ersterStufe = [[errechne_fahrtkosten_ersterStufe(reihe, spalte) for spalte in koordinaten_standorte_ersterStufe] for reihe in koordinaten_standorte_ersterStufe]
##mit der Funktion errechne_fahrtkosten_zweiterStufe aus der Datei Fahrtkosten_berechnen_Funktion,
##werden die Fahrtkosten der zweiten Stufe berechnet
fahrtkosten_zweiterStufe = [[errechne_fahrtkosten_zweiterStufe(reihe, spalte) for spalte in koordinaten_standorte_zweiterStufe] for reihe in koordinaten_standorte_zweiterStufe]
#_______________________________________________________________________
##mit der Funktion berechne_Crainic_drei_Indizes aus der Datei optLsg_Funktion
##wird die optimale Lösung eines Two-Echelon Location Routing Problems anhand
##des Modells 3i-2E-LRP mit drei Indizes von Crainic et al.(2011) berechnet
optLsg_dreiIndizes = berechne_Crainic_drei_Indizes(plattform, satellit, standorte_ersterStufe, primaerfahrzeug, standorte_zweiterStufe, sekundaerfahrzeug, kunde, alleStandorte,
anzahlStandorte, fixkosten_plattform, fixkosten_satellit, nutzungskosten_primaerfahrzeug)
Code: Alles auswählen
import math
#_______________________________________________________________________
##Funktion zur Berechnung der Fahrtkosten der ersten Stufe aus den euklidischen Distanzen
##multipliziert mit 200, Ausgabe als geschachtelte Liste
def errechne_fahrtkosten_ersterStufe(x, y):
return math.ceil(math.sqrt((int(y[0])-int(x[0]))**2+(int(y[1])-int(x[1]))**2)*200)
##Funktion zur Berechnung der Fahrtkosten der zweiten Stufe aus den euklidischen Distanzen
##multipliziert mit 100, Ausgabe als geschachtelte Liste
def errechne_fahrtkosten_zweiterStufe(x, y):
return math.ceil(math.sqrt((int(y[0])-int(x[0]))**2+(int(y[1])-int(x[1]))**2)*100)
Code: Alles auswählen
Reloaded modules: Einlesen_Prodhon_Funktion, Fahrtkosten_berechnen_Funktion, optLsg_Funktion
Traceback (most recent call last):
File "<ipython-input-21-5d6bef3c9499>", line 1, in <module>
runfile('C:/Users/bine/OneDrive/Masterarbeit/Python/3i-2E-LRP/3_Gurobi_Crainic_3i-2E-LRP -/Crainic_3i-2E-LRP.py', wdir='C:/Users/bine/OneDrive/Masterarbeit/Python/3i-2E-LRP/3_Gurobi_Crainic_3i-2E-LRP -')
File "C:\Users\bine\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 710, in runfile
execfile(filename, namespace)
File "C:\Users\bine\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/bine/OneDrive/Masterarbeit/Python/3i-2E-LRP/3_Gurobi_Crainic_3i-2E-LRP -/Crainic_3i-2E-LRP.py", line 57, in <module>
anzahlStandorte, fixkosten_plattform, fixkosten_satellit, nutzungskosten_primaerfahrzeug)
File "C:\Users\bine\OneDrive\Masterarbeit\Python\3i-2E-LRP\3_Gurobi_Crainic_3i-2E-LRP -\optLsg_Funktion.py", line 53, in berechne_Crainic_drei_Indizes
quicksum(fahrtkosten_ersterStufe[i][j]*r_ersteStufe.sum(i,j,primaerfahrzeug) for i in standorte_ersterStufe for j in standorte_ersterStufe) +
TypeError: 'int' object is not iterable
Code: Alles auswählen
##Definition zum Einlesen aus einer Text-Datei
def read_textfile(filename):
with open(filename, 'r') as g:
lines = [y.rstrip('\n') for y in g]
#_______________________________________________________________________
##erste Zeile einlesen
#Anzahl an Kunden
anzahl_kunde = int(lines[0])
#aus der Anzahl an Kunden wird eine Liste erstellt
kunde = []
[kunde.append(k) for k in range(anzahl_kunde)]
##zweite Zeile einlesen
#Anzahl an Satelliten
anzahl_satellit = int(lines[1])
#aus der Anzahl an Satelliten wird eine Liste erstellt
satellit = []
[satellit.append(s) for s in range(anzahl_satellit)]
##vierte Zeile auslesen
#ein Tupel mit den Koordinaten der Plattform wird erstellt
koordinaten_plattform = []
tupel = lines[3].split('\t')
koordinaten_plattform.append((int(tupel[0]),int(tupel[1])))
##fünfte Zeile auslesen bis zur ersten Leerzeile
#ein Tupel mit den Koordinaten der Satelliten wird erstellt
#je nach Anzahl der Satelliten werden ab der fünften Zeile entsprechend viele Zeilen eingelesen
koordinaten_satellit = []
for line in range(4, anzahl_satellit+4):
tupel = lines[line].split('\t')
koordinaten_satellit.append((int(tupel[0]),int(tupel[1])))
##Einlesen der Koordinaten der Kundenstandorte
#ein Tupel mit den Koordinaten der Kunden wird erstellt
#je nach Anzahl der Kunden werden entsprechend viele Zeilen eingelesen
koordinaten_kunde = []
for line in range(anzahl_satellit+5, anzahl_kunde+anzahl_satellit+5):
tupel = lines[line].split('\t')
koordinaten_kunde.append((int(tupel[0]),int(tupel[1])))
##Anzahl an Sekundärfahrzeugen zum Erzeugen einer Liste mit der Kapazität der Sekundärfahrzeuge
#Anzahl an benötigter Fahrzeuge zweiter Stufe höchstens gleich der Anzahl an Kunden
anzahl_sekundaerfahrzeug = anzahl_kunde
##Einlesen der Kapazität der Sekundärfahrzeuge
kapazitaet_sekundaerfahrzeug = []
[kapazitaet_sekundaerfahrzeug.append(int(lines[anzahl_kunde+anzahl_satellit+6])) for k in range(anzahl_sekundaerfahrzeug)]
##Anzahl an Primärfahrzeugen zum Erzeugen einer Liste mit der Kapazität der Primärfahrzeuge
#Anzahl an benötigter Fahrzeuge erster Stufe höchstens gleich der Anzahl an Satelliten
anzahl_primaerfahrzeug = anzahl_satellit
##Einlesen der Kapazität der Primärfahrzeuge
kapazitaet_primaerfahrzeug = []
[kapazitaet_primaerfahrzeug.append(int(lines[anzahl_kunde+anzahl_satellit+7])) for k in range(anzahl_primaerfahrzeug)]
##Einlesen der Kapazitäten der Satelliten
#eine Liste mit den Kapazitäten der Satelliten wird erstellt
#je nach Anzahl der Satelliten werden entsprechend viele Zeilen eingelesen
kapazitaet_satellit = []
for line in range(anzahl_kunde+anzahl_satellit+9,anzahl_satellit+anzahl_kunde+anzahl_satellit+9):
teil = lines[line].split('\n')
kapazitaet_satellit.append(int(teil[0]))
##Einlesen der Nachfragen der Kunden
#eine Liste mit den Nachfragen der Kunden wird erstellt
#je nach Anzahl der Kunden werden entsprechend viele Zeilen eingelesen
kundennachfrage = []
for line in range(anzahl_satellit+anzahl_kunde+anzahl_satellit+10,anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+10):
teil = lines[line].split('\n')
kundennachfrage.append(int(teil[0]))
##Einlesen der Kosten der Satelliten
#eine Liste mit den Kosten der Satelliten wird erstellt
#je nach Anzahl der Kunden werden entsprechend viele Zeilen eingelesen
fixkosten_satellit = []
for line in range(anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+11,anzahl_satellit+anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+11):
teil = lines[line].split('\n')
fixkosten_satellit.append(int(teil[0]))
##Einlesen der Kosten der Sekundärfahrzeuge
nutzungskosten_sekundaerfahrzeug = []
[nutzungskosten_sekundaerfahrzeug.append(int(lines[anzahl_satellit+anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+12])) for n in range(anzahl_sekundaerfahrzeug)]
##Einlesen der Kosten der Primärfahrzeuge
wert_nutzungskosten_primaerfahrzeug = int(lines[anzahl_satellit+anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+13])
nutzungskosten_primaerfahrzeug = []
[nutzungskosten_primaerfahrzeug.append(int(lines[anzahl_satellit+anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+13])) for n in range(anzahl_primaerfahrzeug)]
##Einlesen der Kosten der Plattform
fixkosten_plattform = [int(lines[anzahl_satellit+anzahl_kunde+anzahl_satellit+anzahl_kunde+anzahl_satellit+15])]
#_______________________________________________________________________
##weitere Parameter
#alle Instanzen beinhalten nur eine Plattform
plattform = [0]
anzahl_plattform = 1
#Standorte erster Stufe beinhalten die Plattform und alle Satelliten
standorte_ersterStufe = plattform + satellit
#Koordinaten der Standorte der ersten Stufe
koordinaten_standorte_ersterStufe = koordinaten_plattform + koordinaten_satellit
#Standorte zweiter Stufe beinhalten alle Satelliten und alle Kunden
standorte_zweiterStufe = satellit + kunde
#Koordinaten der Standorte der zweiter Stufe
koordinaten_standorte_zweiterStufe = koordinaten_satellit + koordinaten_kunde
#alle Standorte der drei Ebenen
alleStandorte = plattform + satellit + kunde
#Anzahl aller Standorte der drei Ebenen
anzahlStandorte = len(alleStandorte)
#Kapazität der Plattform
#mindestens Summe über alle Kundennachfragen
kapazitaet_plattform = [sum(kundennachfrage)]
#aus der Anzahl an Sekundärfahrzeugen wird eine Liste erstellt
sekundaerfahrzeug = []
[sekundaerfahrzeug.append(k) for k in range(anzahl_sekundaerfahrzeug)]
#aus der Anzahl an Primärfahrzeugen wird eine Liste erstellt
primaerfahrzeug = []
[primaerfahrzeug.append(k) for k in range(anzahl_primaerfahrzeug)]
#_______________________________________________________________________
##Rückgabe der Eingelesenen Parameter
return (plattform, koordinaten_plattform, kapazitaet_plattform, fixkosten_plattform, anzahl_plattform,
satellit, koordinaten_satellit, kapazitaet_satellit, fixkosten_satellit, anzahl_satellit, kunde,
koordinaten_kunde, kundennachfrage, anzahl_kunde, standorte_ersterStufe, koordinaten_standorte_ersterStufe, standorte_zweiterStufe,
koordinaten_standorte_zweiterStufe, alleStandorte, anzahlStandorte, primaerfahrzeug, kapazitaet_primaerfahrzeug, wert_nutzungskosten_primaerfahrzeug,
anzahl_primaerfahrzeug, sekundaerfahrzeug, kapazitaet_sekundaerfahrzeug, nutzungskosten_sekundaerfahrzeug,
anzahl_sekundaerfahrzeug)
Code: Alles auswählen
kunde = []
[kunde.append(k) for k in range(anzahl_kunde)]
Code: Alles auswählen
kunde = []
for k in range(anzahl_kunde):
kunde.append(k)
Code: Alles auswählen
kunde = [k for k in range(anzahl_kunde)]
Code: Alles auswählen
kunde = list(range(anzahl_kunde))