Объектно-ориентированная реализация агентного моделирования
Следующие классы описывают поведение игроков.
![\begin{verbatim}
abstract class TAgent
{
public int Star;
public TAgent(int Star)
{
this.Star = Star;
}
abstract public int move(TArray Arr, Random rnd);
}
class TAgent1 : TAgent
{
public TAgent1(int Star) : base(Star) { }
public override int move(TArray Arr, Random rnd)
{
if (Arr.Who(4) == 0)
{
Arr.Check(4, Star);
return 4;
}
int[] Angles = new int[4] {0, 2, 6, 8};
int AngCount = 0;
int i, I;
for (i = 0; i < 4; i++)
{
if (Arr.Who(Angles[i]) == 0)
{
AngCount++;
}
}
\end{verbatim}](/sites/default/files/tex_cache/97adbdbda2a52b8a4acb4eb13ad380a3.png)
![\begin{verbatim}
if (AngCount > 0)
{
I = rnd.Next(AngCount);
for (i = 0; i < 4; i++)
{
if (Arr.Who(Angles[i]) == 0)
{
if (I == 0)
{
Arr.Check(Angles[i], Star);
return Angles[i];
}
I--;
}
}
}
I = rnd.Next(Arr.GetCount());
for (i = 0; i < 9; i++)
{
if (Arr.Who(i) == 0)
{
if (I == 0)
{
Arr.Check(i, Star);
return i;
}
I--;
}
}
return 0;
}
}
\end{verbatim}](/sites/default/files/tex_cache/fbfb684f5d701ab8a17164bb9dabe262.png)

И последний класс управляет всей игрой. В начале он выбирает
очередность ходов, но первый игрок всегда играет "крестиком"
(цифрой ), а второй "ноликом" (цифрой
).
![\begin{verbatim}
class TXO
{
public Random rnd;
TArray Arr;
TAgent1 A1;
TAgent2 A2;
public TXO()
{
rnd = new Random();
Clear();
}
void Clear()
{
Arr = new TArray();
A1 = new TAgent1(1);
A2 = new TAgent2(2);
}
public int Run()
{
Clear();
int res = 0;
TAgent[] Agents = new TAgent[2];
if (rnd.Next(2) == 0)
{
Agents[0] = A1;
Agents[1] = A2;
}
else
{
Agents[0] = A2;
Agents[1] = A1;
}
\end{verbatim}](/sites/default/files/tex_cache/4a74765eb930a42d6d5e76783757a2b6.png)
![\begin{verbatim}
for (int i = 0; i < 9; i++)
{
if ((i % 2) == 0)
{
Console.WriteLine("{0} => {1}",
Agents[0].Star,
Agents[0].move(Arr, rnd));
if (Arr.IsOver(Agents[0].Star))
{
res = Agents[0].Star;
break;
}
}
else
{
Console.WriteLine("{0} => {1}",
Agents[1].Star,
Agents[1].move(Arr, rnd));
if (Arr.IsOver(Agents[1].Star))
{
res = Agents[1].Star;
break;
}
}
}
return res;
}
}
\end{verbatim}](/sites/default/files/tex_cache/6849b6605fa59b8b2db7f43511bcd465.png)
Теперь сыграем партий.

Типичный результат игры такой:

Примерно в трех из четырех партий первый игрок, обладающий более интеллектуальной стратегией выигрывает у второго, который по сути играет автоматически случайно ставя "нолик".
Ключевые термины
Агент - некоторая сущность способная взаимодействовать с внешней средой.
Внешняя среда - программная среда, в которой действуют агенты.
Функция определения очередности ходов агентов - правило, задающее последовательность ходов агентов.
Краткие итоги Реализована нетривиальная динамическая система на основе агентного моделирования. Проведены вычислительные эксперименты, которые дали статистические характеристики агнетов.
Ключевые термины
Агент - некоторая сущность способная взаимодействовать с внешней средой.
Внешняя среда - программная среда, в которой действуют агенты.
Функция определения очередности ходов агентов - правило, задающее последовательность ходов агентов.
Краткие итоги: Реализована нетривиальная динамическая система на основе агентного моделирования. Проведены вычислительные эксперименты, которые дали статистические характеристики агнетов.