Esempio n. 1
0
class Controller:
    def __init__(self, filename):
        self.__problem = Problem(filename)
        self.__x = self.__problem.getX()
        self.__y = self.__problem.getY()
        self.__nn = ArtificialNeuralNetwork(self.__x, self.__y, 2)
        
    def solve(self):
        self.__nn.loss=[]
        iterations =[]
        for i in range(4000):
            self.__nn.feedforward()
            learning_rate = 0.5
            self.__nn.backpropagation(learning_rate)
            iterations.append(i)
    
        print(self.__nn.output)
        mpl.pyplot.plot(iterations, self.__nn.loss, label='loss value vs iteration')
        mpl.pyplot.xlabel('Iterations')
        mpl.pyplot.ylabel('loss function')
        mpl.pyplot.legend()
        mpl.pyplot.show()
class Controller:
    def __init__(self, filename):
        self._problem = Problem(filename)
        self._algorithm = Algorithm()

    def computeMinCapacities(self):
        capacity = self._problem.getCapacity()
        x = self._problem.getX()
        if len(capacity["small"]) == 3:
            small = self._algorithm.triangular(x, capacity["small"])
        else:
            small = self._algorithm.trapezoidal(x, capacity["small"])

        if len(capacity["medium"]) == 3:
            medium = self._algorithm.triangular(x, capacity["medium"])
        else:
            medium = self._algorithm.trapezoidal(x, capacity["medium"])

        if len(capacity["high"]) == 3:
            high = self._algorithm.triangular(x, capacity["high"])
        else:
            high = self._algorithm.trapezoidal(x, capacity["high"])

        return small, medium, high

    def computeMinTextures(self):
        texture = self._problem.getTexture()
        w = self._problem.getW()
        if len(texture["very soft"]) == 3:
            verySoft = self._algorithm.triangular(w, texture["very soft"])
        else:
            verySoft = self._algorithm.trapezoidal(w, texture["very soft"])

        if len(texture["soft"]) == 3:
            soft = self._algorithm.triangular(w, texture["soft"])
        else:
            soft = self._algorithm.trapezoidal(w, texture["soft"])

        if len(texture["normal"]) == 3:
            normal = self._algorithm.triangular(w, texture["normal"])
        else:
            normal = self._algorithm.trapezoidal(w, texture["normal"])

        if len(texture["resistant"]) == 3:
            resistant = self._algorithm.triangular(w, texture["resistant"])
        else:
            resistant = self._algorithm.trapezoidal(w, texture["resistant"])

        return verySoft, soft, normal, resistant

    def computeCycleTypeMin(self):
        small, medium, high = self.computeMinCapacities()
        verySoft, soft, normal, resistant = self.computeMinTextures()

        delicate = min(small, verySoft)
        easy = max(min(soft, small), min(verySoft, medium), min(normal, small),min(resistant, small))
        normalCycle = max(min(soft, medium), min(normal, medium), min(resistant, medium), min(verySoft, high), min(soft, high))
        intense = max(min(normal, high), min(resistant, high))

        return delicate, easy, normalCycle, intense

    def run(self):
        cycleType = self._problem.getCycle()
        midDelicate = cycleType["delicate"][2]
        midEasy = cycleType["easy"][1]
        midNormal = cycleType["normal"][1]
        midIntense = cycleType["intense"][1]
        # print(midIntense)
        delicate, easy, normalCycle, intense = self.computeCycleTypeMin()
        # print("delicate: " + str(delicate) + "; " + "easy: " + str(easy) + "; "
        #       + "normal cycle: " + str(normalCycle) + "; " + "intense: " + str(intense))
        sumOfMax = delicate + easy + normalCycle + intense
        s = delicate * midDelicate + easy * midEasy + normalCycle * midNormal + intense * midIntense
        v = s / sumOfMax
        return v