Ejemplo n.º 1
0
     def getCost(self, ce , resultToFill):

        cost = 0
        ca = o.CircuitAnalyser(ce)

        converged = ca.calcDCOperatingPoint()

        '''hard constraints'''
        if(not converged and ce.getSolutionAt("Q7IT") < 1e-3 and not(
           np.abs(ce.getSolutionAt("Q1C")-ce.getSolutionAt("Q6C")) > 0.5)):
            cost = 1000
            resultToFill.setCost(cost)
            return cost

        ''' optimizations '''
        #mag = ca.getGain("V3","voutPlus",180e9)
        res = ca.getTrans(0,1e-10,1e-13,["Q3C","Q1C"])#,"LOPlus","RFPlus","RFIN1"])

        # how to get a diff-Signal
        out = np.zeros((2,res[0].shape[1]),dtype = np.float64)
        integ = 0
        for i in range(res[0].shape[1]):
            out[0][i] = (res[0])[0][i]
            out[1][i] = ((res[0])[1][i] - (res[0])[2][i])**2
            if (out[0][i] > 0.4e-10):
                integ += out[1][i]

        max = np.amax(out[1][:])
        if(math.isnan(max)):
            max = -100
        print("Max: %G"%max)
        cost = -integ#-max
        resultToFill.setCost(cost)
        return cost
Ejemplo n.º 2
0
     def getCost(self, ce , resultToFill):

        ca = o.CircuitAnalyser(ce)
        converged = ca.calcDCOperatingPoint()

        '''hard constraints'''
        if(not converged and ce.getSolutionAt("Q7IT") < 1e-3 and ce.getSolutionAt("Q9IT") < 1e-3):
            cost = 1000
            resultToFill.setCost(cost)
            return cost

        ''' optimizations '''
        #mag = ca.getGain("V2","OUT1",18e9)
        res = ca.getTrans(0,0.5e-6,1e-8,["OUT2","OUT1"])

        # how to get a diff-Signal
        out = np.zeros((2,res[0].shape[1]),dtype = np.float64)
        for i in range(res[0].shape[1]):
            out[0][i] = (res[0])[0][i]
            out[1][i] = (res[0])[1][i] - (res[0])[2][i]

        max = np.amax(np.absolute(out[1][:]))
        print("Max: %G"%max)

        cost = - max
        resultToFill.setCost(cost)
        return cost
Ejemplo n.º 3
0
     def getCost(self, ce , resultToFill):

        cost = 0
       
        ca = o.CircuitAnalyser(ce)
        ce.printComponents()
        np.set_printoptions(precision=1)
        #print(ce.A.shape)
        converged = ca.calcDCOperatingPoint()
        print(ce.compDict)
        res = CircuitAnalysis.newtonRaphson(ce)
        print(res[3])

        ca.printDCOp(["R3","R2","R1","R6"])
        print("A")
        print(ce.A.real)
        print("x")
        print(ce.x)
        
        if(not self.oldx == None):
            print("Differnez:")
            print(self.oldx - ce.x)
            print(self.oldA.real - ce.A.real)
        
        self.oldx = copy(ce.x)
        self.oldA = copy(ce.A)

        #print(ce.A)
        ca.plot_semilogx(ca.getACAnalysis_semilogx("V2",["OUT"],9,12,10)[0])

        '''hard constraints'''
    
        ''' optimizations '''
        mag = ca.getGain("V2","OUT",180e9)
        '''
        res = ca.getTrans(0,0.3e-10,1e-13,["Q3C","Q1C"])#,"LOPlus","RFPlus","RFIN1"])

        # how to get a diff-Signal
        out = np.zeros((2,res[0].shape[1]),dtype = np.float64)
        integ = 0
        for i in range(res[0].shape[1]):
            out[0][i] = (res[0])[0][i]
            out[1][i] = ((res[0])[1][i] - (res[0])[2][i])**2
            if (out[0][i] > 0.4e-10):
                integ += out[1][i]
        
        max = np.amax(out[1][:])
        '''
        if(math.isnan(mag)):
            mag = -100
        
        cost = -mag #-integ#-max
        resultToFill.setCost(cost)
        return cost
Ejemplo n.º 4
0
     def getCost(self, ce , resultToFill):

        ca = o.CircuitAnalyser(ce)
        converged = ca.calcDCOperatingPoint()

        '''hard constraints'''
        if(not converged):
            cost = 1000
            resultToFill.setCost(cost)
            return cost

        mag = ca.getGain("V2","OUT",10e10)
        cost = - mag
        resultToFill.setCost(cost)

        return cost
Ejemplo n.º 5
0
                integ += out[1][i]
        
        max = np.amax(out[1][:])
        '''
        if(math.isnan(mag)):
            mag = -100
        
        cost = -mag #-integ#-max
        resultToFill.setCost(cost)
        return cost

'''
setup optimization
'''

seq = o.CircuitSystemEquations(o.NetToComp('AmplifierTB.net').getComponents())

olist = [o.Optimizable(["R3"],"R",1250,1255),o.Optimizable(["R1"],"R",50000,50005),o.Optimizable(["R6"],"R",2000,2005)]
opti = o.BruteForceOptimizer(seq,olist,CostFunction(list()),10,o.SimpleResult(),None)
opti.run()


'''
result:
'''
ca = o.CircuitAnalyser(seq)
ca.plot_semilogx(ca.getACAnalysis_semilogx("V2",["OUT"],6,12,100)[0])

ranking = opti.getResults()
for r in ranking:
    print (r.toString())
Ejemplo n.º 6
0
            if (out[0][i] > 0.4e-10):
                integ += out[1][i]

        max = np.amax(out[1][:])
        if(math.isnan(max)):
            max = -100
        print("Max: %G"%max)
        cost = -integ#-max
        resultToFill.setCost(cost)
        return cost

'''
setup and run optimization
'''

seq = o.CircuitSystemEquations(o.NetToComp('GilbertMixer/GilberMixerEasy.net').getComponents())
cf = CostFunction(list()) # no constraints defined

olist = [o.Optimizable(["R4","R5"],400,800),o.Optimizable(["R10","R12"],35000,50000),o.Optimizable(["R6","R8"],10000,30000)]
#olist = [o.Optimizable(["R17","R20"],100,1000),o.Optimizable(["R15","R18"],300,1500)]

opti = o.DownHillSimplexOptimizer(seq,olist,CostFunction(list()),10,o.SimpleResult(),None)

opti.run()

'''
result:
'''
ca = o.CircuitAnalyser(seq)
ca.plot_semilogx(ca.getACAnalysis_semilogx("V3",["Q1C"],9,12,10)[0])
Ejemplo n.º 7
0
            out[0][i] = (res[0])[0][i]
            out[1][i] = (res[0])[1][i] - (res[0])[2][i]

        max = np.amax(np.absolute(out[1][:]))
        print("Max: %G"%max)

        cost = - max
        resultToFill.setCost(cost)
        return cost


'''
setup optimization
'''

seq = o.CircuitSystemEquations(o.NetToComp('LoBuffer/LoBuffer.net').getComponents())
cf = CostFunction(list()) # no constraints defined

olist = [o.Optimizable(["R1","R3"],400,800),o.Optimizable(["R2","R4"],400,800),o.Optimizable(["R16","R14"],30000,50000)]

opti = o.BruteForceOptimizer(seq,olist,CostFunction(list()),10,o.SimpleResult(),None)

opti.run()

'''
result:
'''
ca = o.CircuitAnalyser(seq)
ca.plot_semilogx(ca.getACAnalysis_semilogx("V2",["OUT1"],5,12,10)[0])

ranking = opti.getResults()