Sequential Games

Sequential Games#

The four-player game is continued from the simulation example. Its pseudogradient map \(F_1\) is affine, \(1.4785\)-monotone and \(0.1605\)-cocoercive.

This example performs Synthesis of a Nash Equilibrium seeking algorithm in two scenarios:

  1. Simultaneous: each agent updates its strategy \(z^i_k\) at every time step \(k\)

  2. Sequential: the agents take turns updating their strategies, \(z^i_k\) changes only once per four time steps.

Both algorithms permit only explicit evaluations of the pseudogradient map \(F_1\).

The Simultaneous setting involves an LTI system, and returns an algorithm with convergence rate \(\rho \leq 0.8733\). The Sequential setting is modeled as a periodic-orbit system, and yields an algorithm with convergence rate \(\rho \leq 0.9667\).

Figure 1 plots a trajectory of the simultaneous game.

../../_images/syn_nash_uncons_simul_dark.png

Figure 1: Simultaneous play of the game#

../../_images/syn_nash_uncons_simul_light.png

Figure 1: Simultaneous play of the game#

Figure 2 plots a trajectory of the sequential game.

../../_images/syn_nash_uncons_coord_dark.png

Figure 2: Sequential play of the game#

../../_images/syn_nash_uncons_coord_light.png

Figure 2: Sequential play of the game#

In the designed sequential algorithm, each agent \(i\) has full knowledge of the entire pseudogradient vector \(w_k\). The partial knowledge setting involves allowing only the actively playing agent \(i\) access to \(w^i_k\). Synthesis in this partial knowledge setting returns an infeasible controller \((\rho \geq 2)\).

Code for sequential Nash Equilibrium Seeking#
 1%parameters of the game
 2mu = 1.4785; beta = 0.1605;
 3%number of agents
 4
 5%describe the operators
 6op1 = op_gen();
 7op1.monotone = mu;
 8op1.cocoercive = beta;
 9
10ops = {op1};
11
12%form the network
13c=4; 
14M = circshift(eye(c), -1); %cyclic sequential play
15network = coordinate_descent_system(c);
16
17%form the systems
18sys_simul = opt_system(ops);
19sys_coord = opt_system_periodic_orbit(ops,  network, [], M);
20
21%pose managers
22config = opt_config();
23config.syn.prox= 0;
24man_simul = opt_synthesis(sys_simul, config);
25man_coord = opt_synthesis(sys_coord, config);
26
27%solve
28sol_simul = man_simul.bisect();
29sol_coord = man_coord.bisect();