Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vebersol

Teoria dos Jogos: Encontrar o equilíbrio de Nash de um jogo.

Recommended Posts

Olá pessoal, estou com um problema para juntar as estratégias.

 

Para desenvolver a forma normal do jogo, é necessário primeiro dizer o número de jogadores do jogo, depois dizer quantas estratégias cada jogador possui e apartir daí dizer cada estratégia de cada jogador. Até aí eu consegui desenvolver. Mas para calcular os equilíbrios de nash preciso fazer A1 x A2 (A1 cartesiano A2 no exemplo abaixo).

 

No entanto, não sei como cruzar os dados, por exemplo, quero fazer assim:

 

A1 = {a, b} e A2 = {c, d, e}

 

A1 x A2 = {(a, c), (a, d), (a, e), (b, c), (b, d), (b, e)}

 

Se vocês rodarem o script vão ver que chego no resultado abaixo:

 

Exemplo de um jogo com 2 jogadores e cada estratégia que ambos possuem.

 

Ações para o jogador 1:

Ação 0 => a

Ação 1 => b

Ações para o jogador 2:

Ação 0 => c

Ação 1 => d

Ação 2 => e

 

Desde já agradeço pela ajuda.

 

<?php $no_jog = $_POST['jogadores'];if($_POST['tres']) { //Jogador$a = 1;while ($a <= $no_jog) {echo "Ações para o jogador $a:<br />";foreach ($_POST["estrategia_".$a.""] as $chave => $valor) {echo "Ação $chave => $valor<br />";}echo "<hr />";$a++;//fecha while}//fecha if 3}else {if($_POST['dois']) {echo "<form method=\"post\" name=\"main\">";//Jogador$a = 1;while ($a <= $no_jog) {//Estrategia$i = 1;$estrategia = $_POST["estrategia_".$a.""];for (;; ) {   if ($i > $estrategia) {	   break;   }echo "<p>Ação $i para o jogador $a:	<input name=\"estrategia_".$a."[]\" type=\"text\" size=\"3\" />  </p>";  $i++;//fecha for}echo "<hr>";$a++;//Fecha while}echo "<p><input name=\"jogadores\" type=\"hidden\" value=\"$no_jog\"><input name=\"tres\" type=\"submit\" value=\"Enviar\"></p></form>";//fecha if dois}else {if($_POST['um']) {echo "<form method=\"post\" name=\"main\">";//Jogador$i = 1;for (;; ) {   if ($i > $no_jog) {	   break;   }echo "<p>Número de ações disponíveis para o jogador $i:	<input name=\"estrategia_$i\" type=\"text\" size=\"3\" />  </p>";  $i++;//fecha for}  echo "<p><input name=\"jogadores\" type=\"hidden\" value=\"$no_jog\"><input name=\"dois\" type=\"submit\" value=\"Enviar\"></p></form>";//fecha if}else { ?><form method="post" name="main">  <p>Número de Jogadores:	<input name="jogadores" type="text" size="3" />  </p>  <p>	<input name="um" type="submit" value="Enviar">	</p></form><?php } } } ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria essa multiplicação?? ou eu entendi errado...

 

$c=0;for($i=0; $i<count($a); $i++){	for($e=0; $e<count($b); $e++){		$c+=$a[$i]*$b[$e];	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi esse teu raciocínio, ou acho que tu não entendeste o meu.

 

Passo 1:

No arquivo que eu enviei tu determina um número x de jogadores, o que vou chamar de $no_jog, e cada jogador será $a no loop, ou seja, o loop sai de $a = 1 e vai até $a = $no_jog.

 

Passo 2:

Depois tu diz quantas estratégias tem cada jogador, o que vou chamar de $estrategia_$a (estrategia do jogador x), mais uma vez $i está relacionado a cada $a, e $i vai de $i = 1 até $i = $estrategia_$a.

 

Passo 3:

Até aí tudo ok, porque consigo gerar um input para cada estratégia, no meu exemplo, 2 inputs pro jogador 1 e 3 para o jogador 2 onde vou digitar a, b, c, d, e nos inputs.

 

O próximo passo é fazer A1 (estrategias do jogador 1) X A2 (estratégias do jogador 2. Eu vi que dá pra fazer com array (""), mas não dá para formar um array de um while e um foreach.

 

Fica claro que o número de jogadores e estratégias é infinito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.