Problem in the function call in Python 3

0

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

    
asked by XBoss 03.02.2018 в 14:35
source

1 answer

2

To refer to a method / variable of the same instance within a class you must use self. (as you would use object, when referring to a method / variable from another instance), your code would remain (I took the liberty of adding the line "# - * - coding: utf-8 - * -" since I received the error " SyntaxError: Non-ASCII character '\ xc3' in file stack03.py on line 98, but no encoding declared; see link for details "):

# -*- coding: utf-8 -*-

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(self.getTareas())):
            for j in range(len(self.getTareas())):
                self.__feromonas[i][j] = 0.0

    def crearHormigas(self, colonia):
        for numero in range(self.getNumeroHormigas()):
            ant = hormiga.Hormiga(colonia)
            self.__hormigas.append(ant)

    def getValorInicialFeromona(self): ##VALOR INICIAL FEROMONA: PAGINA 3 TAU0
        return 1/(self.getNumeroHormigas() * getTEDD())

    def getTEDD(self):
        T = 0
        for tarea in self.__sortedList:
            T += tarea.getTiempo()
        return T

    def enviarHormigas(self):
        for hormiguita in self.getHormigas():
            if (hormiguita.getCoste() < self.getMejorCoste()):
                self.setMejorCoste(hormiguita.getCoste())
                for tarea in hormiguira.getRuta():
                    self.__mejorRuta.append(tarea)
            feromonaHormiga = 1.0 / hormiguita.getCoste()
            for pos in range(len(self.getTareas())):
                self.__feromonas[pos][hormiguita.getRuta(pos)] = feromonaHormiga

    def actualizaFeromonas(self):
        for i in range(len(self.getTareas())):
            for j in range(len(self.getTareas())):
                self.__mFeromonas[i][j] = self.__mFeromonas[i][j] * self.getEvaporacion() + self.getConstanteEvaporacion() * getValorInicialFeromona() #NUEVA FORMULA DE FEROMONA DADA EN EL ESTUDIO CIENTÍFICO

    def empezar(self):
        for e in range(self.__iteraciones):
            self.limpiaFeromonas()
            self.enviarHormigas()
            self.actualizaFeromonas()
    
answered by 18.02.2018 / 22:29
source