Example #1
0
class DesignerMainWindow(QtGui.QMainWindow, Ui_MainWindow):
    """Customization for Qt Designer created window"""

    def __init__(self, interpreter=None, parent=None):
        # initialization of the superclass
        super(DesignerMainWindow, self).__init__(parent)
        # setup the GUI --> function generated by pyuic4
        self.setupUi(self)
        self.hop = HopfieldNetwork(100)
        self.hop.setClocksHopfield()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.mem4 = []
        self.input = []
        self.connectElements()
        self.runCount = 0
        self.runPushButton.setEnabled(False)
        self.statusbar.showMessage("Hopfield Network Demo")
        self.inputChanged = False

    def defaultButtonState(self):
        self.mem1PushButton.setEnabled(False)
        self.mem2PushButton.setEnabled(False)
        self.mem3PushButton.setEnabled(False)
        self.mem4PushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)

    def connectElements(self):
        self.connect(self.clearDisplayPushButton, QtCore.SIGNAL("clicked()"), self.clearDisplay)
        self.connect(self.memorizePushButton, QtCore.SIGNAL("clicked()"), self.memorizePattern)
        self.connect(self.randomizePushButton, QtCore.SIGNAL("clicked()"), self.randomizePattern)
        self.connect(self.clearMemPushButton, QtCore.SIGNAL("clicked()"), self.clearMemory)
        self.connect(self.runPushButton, QtCore.SIGNAL("clicked()"), self.runStep)
        self.connect(self.mem1PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem1)
        self.connect(self.mem2PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem2)
        self.connect(self.mem3PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem3)
        self.connect(self.mem4PushButton, QtCore.SIGNAL("clicked()"), self.retriveMem4)
        self.connect(self.inputPushButton, QtCore.SIGNAL("clicked()"), self.retriveInput)
        self.connect(self.saveInputPushButton, QtCore.SIGNAL("clicked()"), self.saveInput)
        self.connect(self.aPushButton, QtCore.SIGNAL("clicked()"), self.retriveA)
        self.connect(self.bPushButton, QtCore.SIGNAL("clicked()"), self.retriveB)
        self.connect(self.cPushButton, QtCore.SIGNAL("clicked()"), self.retriveC)
        self.connect(self.dPushButton, QtCore.SIGNAL("clicked()"), self.retriveD)
        self.connect(self.computeSynWeightsPushButton, QtCore.SIGNAL("clicked()"), self.computeAllWeights)

    def saveInput(self):
        print "saving current pattern as input"
        inpList = []
        for i in range(100):
            exec (("inpList.append(int(self.pushButton_%s.isChecked()))" % i))
        self.input = inpList
        self.inputPushButton.setEnabled(True)
        self.inputChanged = True
        self.runCount = 0

    def computeAllWeights(self):
        self.statusbar.showMessage("Computing synaptic weights")
        self.hop.assignAllSynapticWeights()  # weights are assigned
        self.runPushButton.setEnabled(True)

    def runStep(self):
        self.statusbar.showMessage("Running")

        if self.inputChanged:
            inputPattern = self.input
            self.hop.updateInputs(inputPattern)  # input updating
            self.hop.mooseReinit()
            self.hop.runMooseHopfield(0.0310)

        if self.runCount == 0:
            for i in range(100):
                if np.any((self.hop.allSpikes[i].vector > 0.0) & (self.hop.allSpikes[i].vector < 0.0310)):
                    exec (("self.pushButton_%s.setChecked(True)" % i))
                else:
                    exec (("self.pushButton_%s.setChecked(False)" % i))

        else:
            self.hop.runMooseHopfield(0.02)
            # print 0.0310+(0.02*(self.runCount-1)),(0.0310+(0.02*self.runCount))
            for i in range(100):
                if np.any(
                    (self.hop.allSpikes[i].vector > (0.0301 + (0.02 * (self.runCount - 1))))
                    & (self.hop.allSpikes[i].vector < (0.0301 + (0.02 * self.runCount)))
                ):
                    exec (("self.pushButton_%s.setChecked(True)" % i))
                else:
                    exec (("self.pushButton_%s.setChecked(False)" % i))

        self.runCount += 1
        self.statusbar.showMessage("Done Running")

    def retriveMem1(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem1[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem1")

    def retriveMem2(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem2[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem2")

    def retriveMem3(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem3[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem3")

    def retriveMem4(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.mem4[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Mem4")

    def retriveInput(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(self.input[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Input")

    def retriveA(self):
        a = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(a[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample A")

    def retriveB(self):
        b = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(b[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample B")

    def retriveC(self):
        c = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(c[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample C")

    def retriveD(self):
        d = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
        ]
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(d[int(%s)])" % (i, i)))
        self.statusbar.showMessage("Showing Sample D")

    def clearMemory(self):
        self.hop.clearAllMemory()
        self.clearDisplay()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.input = []
        self.statusbar.showMessage("Cleared all Memory")
        self.runPushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)
        self.runCount = 0

    def randomizePattern(self):
        r = np.random.randint(2, size=100)
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(r[int(%s)])" % (i, i)))

    def memorizePattern(self):
        pattern = []
        for i in range(100):
            exec (("pattern.append(int(self.pushButton_%s.isChecked()))" % i))

        self.hop.updateWeights(pattern)

        for k in range(100):  # very weird that I have to do this!
            if pattern[k] == -1:
                pattern[k] = 0

        savedAlready = self.hop.numMemories
        if savedAlready == 1:
            self.mem1 = pattern
            self.mem1PushButton.setEnabled(True)
            # print pattern
        elif savedAlready == 2:
            self.mem2 = pattern
            self.mem2PushButton.setEnabled(True)
            # print pattern
        elif savedAlready == 3:
            self.mem3 = pattern
            self.mem3PushButton.setEnabled(True)
        elif savedAlready == 4:
            self.mem4 = pattern
            self.mem4PushButton.setEnabled(True)

        self.runPushButton.setEnabled(False)

        self.statusbar.showMessage("New Pattern Memorised")

    def clearDisplay(self):
        for i in range(100):
            exec (("self.pushButton_%s.setChecked(False)" % i))
        self.statusbar.showMessage("Cleared display")
Example #2
0
class DesignerMainWindow(QtGui.QMainWindow, Ui_MainWindow):
    """Customization for Qt Designer created window"""
    def __init__(self, interpreter=None, parent=None):
        # initialization of the superclass
        super(DesignerMainWindow, self).__init__(parent)
        # setup the GUI --> function generated by pyuic4
        self.setupUi(self)
        self.hop = HopfieldNetwork(100)
        self.hop.setClocksHopfield()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.mem4 = []
        self.input = []
        self.connectElements()
        self.runCount = 0
        self.runPushButton.setEnabled(False)
        self.statusbar.showMessage('Hopfield Network Demo')
        self.inputChanged = False

    def defaultButtonState(self):
        self.mem1PushButton.setEnabled(False)
        self.mem2PushButton.setEnabled(False)
        self.mem3PushButton.setEnabled(False)
        self.mem4PushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)

    def connectElements(self):
        self.connect(self.clearDisplayPushButton, QtCore.SIGNAL('clicked()'),
                     self.clearDisplay)
        self.connect(self.memorizePushButton, QtCore.SIGNAL('clicked()'),
                     self.memorizePattern)
        self.connect(self.randomizePushButton, QtCore.SIGNAL('clicked()'),
                     self.randomizePattern)
        self.connect(self.clearMemPushButton, QtCore.SIGNAL('clicked()'),
                     self.clearMemory)
        self.connect(self.runPushButton, QtCore.SIGNAL('clicked()'),
                     self.runStep)
        self.connect(self.mem1PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem1)
        self.connect(self.mem2PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem2)
        self.connect(self.mem3PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem3)
        self.connect(self.mem4PushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveMem4)
        self.connect(self.inputPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveInput)
        self.connect(self.saveInputPushButton, QtCore.SIGNAL('clicked()'),
                     self.saveInput)
        self.connect(self.aPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveA)
        self.connect(self.bPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveB)
        self.connect(self.cPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveC)
        self.connect(self.dPushButton, QtCore.SIGNAL('clicked()'),
                     self.retriveD)
        self.connect(self.computeSynWeightsPushButton,
                     QtCore.SIGNAL('clicked()'), self.computeAllWeights)

    def saveInput(self):
        print 'saving current pattern as input'
        inpList = []
        for i in range(100):
            exec(('inpList.append(int(self.pushButton_%s.isChecked()))' % i))
        self.input = inpList
        self.inputPushButton.setEnabled(True)
        self.inputChanged = True
        self.runCount = 0

    def computeAllWeights(self):
        self.statusbar.showMessage('Computing synaptic weights')
        self.hop.assignAllSynapticWeights()  #weights are assigned
        self.runPushButton.setEnabled(True)

    def runStep(self):
        self.statusbar.showMessage('Running')

        if self.inputChanged:
            inputPattern = self.input
            self.hop.updateInputs(inputPattern)  #input updating
            self.hop.mooseReinit()
            self.hop.runMooseHopfield(0.0310)

        if self.runCount == 0:
            for i in range(100):
                if np.any((self.hop.allSpikes[i].vector > 0.0)
                          & (self.hop.allSpikes[i].vector < 0.0310)):
                    exec(('self.pushButton_%s.setChecked(True)' % i))
                else:
                    exec(('self.pushButton_%s.setChecked(False)' % i))

        else:
            self.hop.runMooseHopfield(0.02)
            #print 0.0310+(0.02*(self.runCount-1)),(0.0310+(0.02*self.runCount))
            for i in range(100):
                if np.any((self.hop.allSpikes[i].vector >
                           (0.0301 + (0.02 * (self.runCount - 1))))
                          & (self.hop.allSpikes[i].vector <
                             (0.0301 + (0.02 * self.runCount)))):
                    exec(('self.pushButton_%s.setChecked(True)' % i))
                else:
                    exec(('self.pushButton_%s.setChecked(False)' % i))

        self.runCount += 1
        self.statusbar.showMessage('Done Running')

    def retriveMem1(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem1[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem1')

    def retriveMem2(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem2[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem2')

    def retriveMem3(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem3[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem3')

    def retriveMem4(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.mem4[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Mem4')

    def retriveInput(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(self.input[int(%s)])' %
                  (i, i)))
        self.statusbar.showMessage('Showing Input')

    def retriveA(self):
        a = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
            0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,
            0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0,
            0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(a[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample A')

    def retriveB(self):
        b = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
            1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(b[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample B')

    def retriveC(self):
        c = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(c[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample C')

    def retriveD(self):
        d = [
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
            1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        ]
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(d[int(%s)])' % (i, i)))
        self.statusbar.showMessage('Showing Sample D')

    def clearMemory(self):
        self.hop.clearAllMemory()
        self.clearDisplay()
        self.defaultButtonState()
        self.mem1 = []
        self.mem2 = []
        self.mem3 = []
        self.input = []
        self.statusbar.showMessage('Cleared all Memory')
        self.runPushButton.setEnabled(False)
        self.inputPushButton.setEnabled(False)
        self.runCount = 0

    def randomizePattern(self):
        r = np.random.randint(2, size=100)
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(r[int(%s)])' % (i, i)))

    def memorizePattern(self):
        pattern = []
        for i in range(100):
            exec(('pattern.append(int(self.pushButton_%s.isChecked()))' % i))

        self.hop.updateWeights(pattern)

        for k in range(100):  #very weird that I have to do this!
            if pattern[k] == -1:
                pattern[k] = 0

        savedAlready = self.hop.numMemories
        if savedAlready == 1:
            self.mem1 = pattern
            self.mem1PushButton.setEnabled(True)
            #print pattern
        elif savedAlready == 2:
            self.mem2 = pattern
            self.mem2PushButton.setEnabled(True)
            #print pattern
        elif savedAlready == 3:
            self.mem3 = pattern
            self.mem3PushButton.setEnabled(True)
        elif savedAlready == 4:
            self.mem4 = pattern
            self.mem4PushButton.setEnabled(True)

        self.runPushButton.setEnabled(False)

        self.statusbar.showMessage('New Pattern Memorised')

    def clearDisplay(self):
        for i in range(100):
            exec(('self.pushButton_%s.setChecked(False)' % i))
        self.statusbar.showMessage('Cleared display')