Объектно-ориентированная реализация агентного моделирования
Следующие классы описывают поведение игроков.
![\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)
Теперь сыграем 
  партий.

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

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