I have a code in python 3 and it gives me errors in calls to defined methods.
My code:
import hormiga
import tareas
class Colonia:
def __init__ (self, tareas, n_iteraciones, evaporacion=0.1, n_hormigas=20):
self.__constanteEvaporacion = evaporacion
self.__nHormigas = n_hormigas
self.__iteraciones = n_iteraciones
self.__evaporacion = 1.0 - evaporacion
self.__tareas = tareas
self.__mejorCoste = float('inf')
self.__mejorRuta = list()
self.__hormigas = []
#inicializamos matriz de feromonas
self.__T = 1 # TEDD
self.__sortedList = sorted(self.__tareas, key=lambda tarea: tarea.getTiempo())
for tarea in self.__sortedList: #EDD
self.__T += tarea.getTiempo() #EDD
self.__mFeromonas = [[1/(self.__nHormigas * self.__T)]*len(self.__tareas) for x in range(len(self.__tareas))]
self.__feromonas = [[0.0]*len(self.__tareas) for x in range(len(self.__tareas))]
#getters y setters
def getConstanteEvaporacion(self):
return self.__constanteEvaporacion
def setConstanteEvaporacion(self,nuevo):
self.__constanteEvaporacion = nuevo
def getNumeroHormigas(self):
return self.__nHormigas
def setNumeroHormigas(self,nuevo):
self.__nHormigas = nuevo
def getNumeroIteraciones(self):
return self.__iteraciones
def setNumeroIteraciones(self,nuevo):
self.__iteraciones = nuevo
def getEvaporacion(self):
return self.__evaporacion
def setEvaporacion(self,nuevo):
self.__evaporacion = nuevo
def getTareas(self):
return self.__tareas
def setTareas(self,nuevo):
self.__tareas = nuevo
def getMejorCoste(self):
return self.__mejorCoste
def setMejorCoste(self,nuevo):
self.__mejorCoste = nuevo
def getMejorRuta(self):
return self.__mejorRuta
def setMejorRuta(self,nuevo):
self.__mejorRuta = nuevo
def getHormigas(self):
return self.__hormigas
def setHormigas(self,nuevo):
self.__hormigas = nuevo
def getMatrizFeromonas(self):
return self.__mFeromonas
def setMatrizFeromonas(self,nuevo):
self.__mFeromonas = nuevo
def getFeromonas(self):
return self.__feromonas
def set(self,nuevo):
self.__feromonas = nuevo
def limpiaFeromonas(self):
for i in range(len(getTareas())):
for j in range(len(getTareas())):
self.__feromonas[i][j] = 0.0
def crearHormigas(self, colonia):
for numero in range(getNumeroHormigas()):
ant = hormiga.Hormiga(colonia)
self.__hormigas.append(ant)
def getValorInicialFeromona(self): ##VALOR INICIAL FEROMONA: PAGINA 3 TAU0
return 1/(getNumeroHormigas() * getTEDD())
def getTEDD(self):
T = 0
for tarea in self.__sortedList:
T += tarea.getTiempo()
return T
def enviarHormigas(self):
for hormiguita in getHormigas():
if (hormiguita.getCoste() < getMejorCoste()):
setMejorCoste(hormiguita.getCoste())
for tarea in hormiguira.getRuta():
self.__mejorRuta.append(tarea)
feromonaHormiga = 1.0 / hormiguita.getCoste()
for pos in range(len(getTareas())):
self.__feromonas[pos][hormiguita.getRuta(pos)] = feromonaHormiga
def actualizaFeromonas(self):
for i in range(len(getTareas())):
for j in range(len(getTareas())):
self.__mFeromonas[i][j] = self.__mFeromonas[i][j] * getEvaporacion() + getConstanteEvaporacion() * getValorInicialFeromona() #NUEVA FORMULA DE FEROMONA DADA EN EL ESTUDIO CIENTÍFICO
def empezar(self):
for e in range(self.__iteraciones):
limpiaFeromonas()
enviarHormigas()
actualizaFeromonas()
The error is in the method to start, it says that the functions limpiaFeromonas()
does not exist nor the other two.
def empezar(self):
for e in range(self.__iteraciones):
limpiaFeromonas()
enviarHormigas()
actualizaFeromonas()
I tried to enter the code directly instead of calling the function, but I get an error saying that another function (defined in the getters) does not exist, so I have assumed that it has to be some bigger problem, not only of the function to start in concrete.
Any ideas?
Thanks