Escolar Documentos
Profissional Documentos
Cultura Documentos
ipynb - Colaboratory
8.6 ≤ VA ≤ 8.8V
7.5 ≤ VB ≤ 7.7V
B1 , B2 , B3 , B4 , B5 , B6 [0, 1]
Programação Inteira
minimizar 100B1 + 50B2 + 500B3 + 20B4 + 100B5 + 60B6
x
− VA ≤ −8.6V
VA ≤ 8.8V
VB ≤ 7.7V
− VB ≤ −7.5V
B1 , B2 , B3 , B4 , B5 , B6 [0, 1]
c = np.array([[100.,50.,500.,20.,100.,60.]])
G = np.array([[57.,-15.,0.,60.,-30.,0.,-10.,6.],[-57.,15.,0.,-60.,30.,0.,10.,-6.],
[0.,15.,39.,0.,30.,40.,6.,-14.],[0.,-15.,-39.,0.,-30.,-40.,-6.,14.],
[0.,0.,0.,0.,0.,0.,-1.,0.],[0.,0.,0.,0.,0.,0.,1.,0.],[0.,0.,0.,0.,0.,0.,0.,1.],
[0.,0.,0.,0.,0.,0.,0.,-1.],[-1.,0.,0.,0.,0.,0.,0.,0.],[0.,-1.,0.,0.,0.,0.,0.,0.],
[0.,0.,-1.,0.,0.,0.,0.,0.],[0.,0.,0.,-1.,0.,0.,0.,0.],[0.,0.,0.,0.,-1.,0.,0.,0.],
[0.,0.,0.,0.,0.,-1.,0.,0.],[0.,0.,0.,0.,0.,-1.,0.,0.]])
h = np.array([[0.],[0.],[0.],[0.],[-8.6],[8.8],[7.7],[-7.5],[0.],[0.],[0.],[0.],[0.],[0.],[0.]])
c = matrix(c,tc='d')
G = matrix(G,tc='d')
h = matrix(h,tc='d')
print('Status:',status)
https://colab.research.google.com/drive/1qWY1v-WmAsoxK34x4ltXs6Ewp819xZ02#scrollTo=zfnSTv9-bQFe&uniqifier=2&printMode=true 1/5
08/07/2019 Trabalho_final.ipynb - Colaboratory
fob = c[0]*x[0]+c[1]*x[1]+c[2]*x[2]+c[3]*x[3]+c[4]*x[4]+c[5]*x[5]
print('FOB:',fob)
n = 0
indice = np.shape(x)
atual = indice[0] - 2
print('Tensão Va =',x[6])
print('Tensão Vb =',x[7])
Status: optimal
FOB: 650.0
Posição das Chaves:
Chave 1 fechada
Chave 2 fechada
Chave 3 fechada
Chave 4 aberta
Chave 5 aberta
Chave 6 aberta
Tensão Va = 8.769230769230768
Tensão Vb = 7.615384615384614
Algoritmo Genético
minimizar 100B1 + 50B2 + 500B3 + 20B4 + 100B5 + 60B6
x
8.6 ≤ VA ≤ 8.8V
7.5 ≤ VB ≤ 7.7V
B1 , B2 , B3 , B4 , B5 , B6 [0, 1]
# Função Crossover
def Crossover(Pop,taxa_crossover):
N = np.size(Pop,0)
Dim = np.size(Pop,1)
Pais = np.round(np.random.rand(N, 2))
Filhos = Pop
for i in range(np.size(Pais,0)):
if np.random.rand(1) < taxa_crossover:
Pai_1 = Pop[int(Pais[i][0])]
Pai_2 = Pop[int(Pais[i][1])]
if len(Filhos) ==0:
Filhos = np.concatenate((Pai_1[:3],Pai_2[3:6]),axis=None)
else:
Filho = np.concatenate((Pai_1[:3],Pai_2[3:6]),axis=None)
i (( i [ ] i [ ]) i )
https://colab.research.google.com/drive/1qWY1v-WmAsoxK34x4ltXs6Ewp819xZ02#scrollTo=zfnSTv9-bQFe&uniqifier=2&printMode=true 2/5
08/07/2019 Trabalho_final.ipynb - Colaboratory
Filho_1 = np.concatenate((Pai_1[:3],Pai_2[3:6]),axis=None)
Filho_2 = np.concatenate((Pai_1[3:6],Pai_2[:3]),axis = None)
Filhos[i,0] = Filho_1[0]
Filhos[i,1] = Filho_2[1]
return Filhos
# Função Mutação
def Mutacao(Pop,taxa_mutacao,):
N = np.size(Pop, 0)
Mutantes = Pop
for i in range(np.size(Mutantes,0)):
if np.random.rand(1)< taxa_mutacao:
mutacao = Mutantes[i][1]
if mutacao == 0:
Mutantes[i][1] = 1
Mutantes[i,0]= Mutantes[i,0]
Mutantes[i,1]= Mutantes[i,1]
else:
Mutantes[i][1] = 0
Mutantes[i,0] = Mutantes[i,0]
Mutantes[i,1] = Mutantes[i,1]
return Mutantes
# Função Fitness
def Fitness(Pop):
Fitness = []
for i in range(len(Pop)):
B1 = Pop[i][0]
B2 = Pop[i][1]
B3 = Pop[i][2]
B4 = Pop[i][3]
B5 = Pop[i][4]
B6 = Pop[i][5]
return Fitness
# função Seleção:
def Selecao(Pop,Num_selecao,Num_torneio):
N = np.size(Pop, 0)
Torneio = np.round(-0.5 + N * np.random.rand(Num_selecao, Num_torneio))
Torneio = Torneio.astype(int)
Campeoes = -100*np.ones((Num_selecao,6))
Fitness_Pop = np.array(Fitness(Pop))
for i in range(len(Torneio)):
Fitness_Candidatos = Fitness_Pop[Torneio[i]]
Aux = np.where(Fitness_Candidatos == np.max(Fitness_Candidatos))
Campeao = Pop[Torneio[i,Aux[0][0]]]
Campeoes[i,0] = Campeao[0]
Campeoes[i,1] = Campeao[1]
Campeoes[i,2] = Campeao[2]
Campeoes[i,3] = Campeao[3]
Campeoes[i,4] = Campeao[4]
Campeoes[i,5] = Campeao[5]
return Campeoes
# Caracteristicas do genetico
https://colab.research.google.com/drive/1qWY1v-WmAsoxK34x4ltXs6Ewp819xZ02#scrollTo=zfnSTv9-bQFe&uniqifier=2&printMode=true 3/5
08/07/2019 Trabalho_final.ipynb - Colaboratory
Num_populacao = 1000
taxa_crossover = 0.5
taxa_mutacao = 0.1
Num_geracao = 10
Dim = 6
Pop= np.round(np.random.rand(Num_populacao,Dim))
for i in range(Num_geracao):
print('Geração:',i+1)
solucao = Pop
Filhos = Crossover(Pop,taxa_crossover)
Pop_PaiseFilhos = np.concatenate([Pop,Filhos])
Pop_mutacao = Mutacao(Pop,taxa_mutacao)
Pop = Selecao(Pop_mutacao,Num_populacao,round(Num_populacao/10))
print('Solução',solucao)
FOB = (100*solucao[i,0] + 50*solucao[i,1] + 500*solucao[i,2] + 20*solucao[i,3]
+ 100*solucao[i,4] + 60*solucao[i,5])
print('FOB = ',FOB)
n = 0
indice = np.shape(solucao)
atual = indice[1]
print('Tensão Va =',Va)
print('Tensão Vb =',Vb)
https://colab.research.google.com/drive/1qWY1v-WmAsoxK34x4ltXs6Ewp819xZ02#scrollTo=zfnSTv9-bQFe&uniqifier=2&printMode=true 4/5
08/07/2019 Trabalho_final.ipynb - Colaboratory
Geração: 1
Geração: 2
Geração: 3
Geração: 4
Geração: 5
Geração: 6
Geração: 7
Geração: 8
Geração: 9
Geração: 10
Solução [[1. 1. 1. 1. 1. 0.]
[1. 0. 0. 0. 0. 0.]
[1. 1. 1. 0. 0. 0.]
...
[1. 1. 1. 1. 1. 1.]
[1. 1. 0. 1. 1. 1.]
[1. 1. 0. 0. 0. 1.]]
FOB = 650.0
Posição das Chaves:
Chave 1 fechada
Chave 2 fechada
Chave 3 fechada
Chave 4 aberta
Chave 5 aberta
Chave 6 aberta
Tensão Va = 8.76923076923077
Tensão Vb = 7.615384615384615
https://colab.research.google.com/drive/1qWY1v-WmAsoxK34x4ltXs6Ewp819xZ02#scrollTo=zfnSTv9-bQFe&uniqifier=2&printMode=true 5/5