Soy programador y estoy haciendo una Inteligencia Artificial para un juego de mesa llamado Hex. Como no estoy tan familiarizado con la ingeniería eléctrica, necesito su experiencia en este tema.
Ahora estoy trabajando en la función de evaluación de la junta. He representado el tablero como un gráfico, ya que eso es lo que una computadora necesita como entrada. Pero en este caso también puedes verlo como un circuito eléctrico. El circuito generalmente se ve así, solo que entonces 11x11 hexágonos:
Los bordes/resistencias son todos 0,1 o INF (infinito).
Mi objetivo es dar una puntuación a la pizarra. Quiero aplicar un voltaje eléctrico a los dos nodos opuestos del límite y luego verificar la resistencia total entre ellos.
He hecho un posible escenario en un tablero de 2x2. Los puntos son nodos, los bordes son resistencias, los números los valores de resistencia y las flechas son mis suposiciones de flujo actual: así que, según lo entiendo, tengo que hacer algo llamado análisis nodal. Así que hice para cada nodo una ecuación donde el voltaje que entra en un nodo es el mismo que el que sale. Así que aquí están las ecuaciones que hice:
Entonces, con algunas manipulaciones algebraicas, puse los números en una matriz, donde los voltajes son las variables, por supuesto: (también asumí que dividir por cero es lo mismo que multiplicar por Infinito, no sé si esa es la forma correcta).
Si resuelves esto obtienes:
Tengo dos preguntas ahora:
1.¿Dónde está mi error? (porque no creo que los voltajes puedan ser NaN o negativos)
2.Si calculé estos voltajes correctamente, ¿cómo calculo la resistencia total?
Establecer nodo , para comenzar. (Es conveniente y puede hacer esto exactamente una vez; para cualquier nodo que desee). También tenga en cuenta que , por lo que cuando busque bordes, deberá encontrar todos los bordes que emanan de todos esos "súper" nodos compartidos. (Entonces no aparecerá a continuación). También noté que su ejemplo más pequeño tiene un "2" como valor para un borde, cuando creo que antes dijo que solo 0, 1 o era posible Sin embargo, viviré con eso.
Entonces, el resumen aquí es: (1) que los nodos conectados por 0 son el mismo nodo y debe encontrar todos los bordes que emanan del mismo nodo al configurar las ecuaciones; y, (2) que bordea con puede ser ignorado; y (3) las fracciones con el nodo especial que usted designe como 0 en el numerador se pueden eliminar.
Tenga en cuenta que es, en efecto, un vértice aislado. Por lo tanto, no podrá calcular un voltaje para él. Eso debería estar bien. Además, haces que tenga un vértice de hoja (no sabría cómo lidiar con hacer tu gráfico). El voltaje allí será desconocido si el borde es y será igual al voltaje en el nodo conectado, de lo contrario. Probablemente lo igualaría, en tales casos, y terminaría con eso.
Finalmente, no voy a otro con el símbolo (puede asumirlo, si lo desea). En su lugar, usaré la notación de borde de , por ejemplo, para representar la resistencia de borde indicada. Si se comparte un nodo, usaré , por ejemplo, para indicar ese supernodo. Tu ejemplo de conjunto de ecuaciones es:
Lo anterior se puede convertir en:
De lo anterior, las simetrías ahora también deberían ser obvias. (Observe las constantes y sus posiciones). La diagonal principal tiene valores únicos, pero el resto tiene valores que aparecen dos veces en posiciones simétricas fáciles de notar.
Pero no necesitas la primera ecuación, ya que sabes el valor de . Así que todo se reduce a solo las dos ecuaciones inferiores convertidas a forma de matriz:
Lo anterior se resuelve en su caso como y .
Resuelto para los voltajes de los nodos, puede calcular la corriente simplemente examinando todos los bordes que salen de su nodo 0 (si lo elige como lo hice yo). Solo hay un borde allí, a saber , por lo que la resistencia total aquí es simplemente .
Eso funciona para .
Debería poder generalizar lo anterior, ya que casi ya está cerca de ser automático.
Creo que hay una forma más sistemática de resolver circuitos, por ejemplo, puede formalizar una forma de escribir la lista de red de su circuito y luego implementar [por ejemplo] el algoritmo MNA para resolver todo el circuito por usted, y luego puede obtener la resistencia equivalente del circuito o cualquier otro parámetro de interés. Encontré una biblioteca de python llamada ahkab que implementa el algoritmo de análisis nodal modificado. en caso de que quisiera implementarlo, es posible que desee verificar esto
He escrito un pequeño script que lee la lista de red de estos nodos de circuito hexagonal y hace el cálculo de la resistencia equivalente.
El formato de la lista de red se parece a esto [puede crear su propio formato]
v 1 6 10
1 1 3
0 1 2
1 2 3
1 2 4
2 3 4
1 4 6
end
la primera línea indica que la fuente de voltaje está conectada entre el nodo 1
y 6
mientras que todas las demás líneas indican el valor de las resistencias y dónde están conectadas <Resistor value> <Node1> <Node2>
y end
para terminar de leer la lista de red
Guión en python 3
import ahkab
ckt=ahkab.Circuit("Math_Max circuit")
nodes=[]
gnd=0
rCount=0
def node_replace(a,b):
#A function for replacing 0 resistive path between nodes
for i in range(len(nodes)):
if(nodes[i][1]==a):
nodes[i][1]=b
if(nodes[i][2]==a):
nodes[i][2]=b
while(True):
nlst=input().split()
if(nlst[0]=='end'): break
if(nlst[0]=='v'):
gnd=int(nlst[2])
ckt.add_vsource(nlst[0],nlst[1],ckt.gnd,dc_value=int(nlst[3]))
else:
nodes.append([int(nlst[0]),nlst[1],nlst[2]])
for i in range(len(nodes)):
if(nodes[i][0]==0):
node_replace(nodes[i][2],nodes[i][1])
for i in range(len(nodes)):
if(nodes[i][0]!=0):
gndNode=nodes[i][2]
if(int(nodes[i][2])==gnd):
gndNode=ckt.gnd
ckt.add_resistor('r'+str(rCount),nodes[i][1],gndNode,value=nodes[i][0])
rCount=rCount+1
results=ahkab.run(ckt, ahkab.new_op())['op']
print("TOTAL CURRENT: ",results['I(V)'][0][0])
print("Equivalent resistance: ",10/abs(results['I(V)'][0][0]))
Este fue el resultado
El código funciona evaluando la corriente total usando el algoritmo MNA y luego dividiendo source voltage / total current
para obtener la resistencia equivalente.
brahans