Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Общие идеи искусственного интеллекта arrow Создаем искусственный интеллект. Урок 9. Рисуем граф пространства состояний.
25.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Создаем искусственный интеллект. Урок 9. Рисуем граф пространства состояний. Печать E-mail
Автор megabax   
21.09.2010 г.

Создаем искусственный интеллект. Урок 9. Рисуем граф пространства состояний.

Исходники у уроку можно скачать здесь.

Продолжим разработку класса TIIProblemSpace. И так, давайте все таки закончим с графической частью, улучшим внешний вид дуг графа и нарисуем стрелочки, метод DrawArc:

procedure TIIProblemSpace.DrawArc(AImage:TImage;index1,index2:integer);
var xr,yr,dx,dy,x,y:integer; ar:double; ari:integer;
      y2:integer;
      side:integer;
begin
   if index2 mod 2 = 0 then
   begin
       side:=-1;
       x:=FLeft+FTopWidth;
    end else begin
       side:=1;
       x:=FLeft;
    end;
    y:=FTop+index1*FDistance;
    y2:=FTop+index2*FDistance;
    dx:=FTopWidth;
    dy:=FTopHeight;
    xr:=x+dx*5;
    yr:=FTop+index2*FDistance;
    DDraw(AImage.Canvas, x, y+dy div 2, x, y2+dy div 2,(10+(index2-index1)*5)*side);
    AImage.Canvas.MoveTo(x, y2+dy div 2);
    AImage.Canvas.LineTo(x-5*side, y2+dy div 2);
    AImage.Canvas.MoveTo(x, y2+dy div 2);
    AImage.Canvas.LineTo(x, y2+dy div 2-7);
end;
 

Что мы сделали? Во первых, в зависимости от того, четная или нечетная вершина-приемник, рисуем дуруг с той или иной стороны. Во вторых нарисовали стерлочку возле вершины приемника.

Вот такую картинку мы увидим, когда после внесенных изменений запустим программу на тестирование.

Создаем искусственный интеллект. Урок 9. Рисуем граф пространства состояний.

Теперь займемся расширением функционала самого класса TIIStateItem. Для начала исправим метод Add, он должен быть объявлен как

procedure Add(Item:TIIStateItem);

его реализация при этом не меняется.

Далее, к классу TIIStateItem добавим метод AddExit, вот как он реализуется:

procedure TIIStateItem.AddExit(Item:TIIStateItem);
begin
    FExits.Add(Item);
end;

Ну, и наконец, реализуем процедуру рисования графа, метод Draw:

procedure TIIProblemSpace.Draw(AImage:TImage);
var i,j,cn,cn1:integer;
begin
   cn:=FItems.Count-1;
   for i:=0 to cn do
   begin
      DrawTop(AImage,i);
      cn1:=TIIStateItem(FItems[i]).ExitsCount-1;
      for j:=0 to cn1 do DrawArc(AImage,i,FItems.IndexOf(TIIStateItem(FItems[i]).Exits[j]));
   end;
end;

Данная процедура перебирает весь список возможных состояний и список выходов у каждого из состояний. состояние это у нас вершина графа, рисуем кружочек, а выход - дуга со стрелкой, для ее рисования вызываем DrawArc.

Теперь в обработчик события создания формы допишем тест наших новых процедур:

procedure TfrmII.FormCreate(Sender: TObject);
var PS:TIIProblemSpace;
      p,p1,p2,p3:TIIStateItem;
begin
   PS:=TIIProblemSpace.Create;
   PS.DrawTop(Image,0);
   PS.DrawTop(Image,1);
   PS.DrawTop(Image,2);
   PS.DrawTop(Image,3);
   PS.DrawTop(Image,4);
   PS.DrawTop(Image,5);
   PS.DrawArc(Image,0,1);
   PS.DrawArc(Image,0,2);
   PS.DrawArc(Image,2,3);
   PS.DrawArc(Image,2,4);
   PS.DrawArc(Image,1,5);

  p:=TIIStateItem.Create;
  p1:=TIIStateItem.Create;
  p2:=TIIStateItem.Create;
  p3:=TIIStateItem.Create;
  p.AddExit(p1);
  p.AddExit(p2);
  p2.AddExit(p3);

  PS.Add(p);
  PS.Add(p1);
  PS.Add(p2);
  PS.Add(p3);
  PS.Draw(ImageTest);
end;

Рисование обратной дуги (от вершины с большим номером к меньшему пока не предусмотрено, поэтому будет рисоваться некорректно. Но этим мы займемсся на следующем уроке, а пока протестим что есть:

Создаем искусственный интеллект. Урок 9. Рисуем граф пространства состояний.

Исходники у уроку можно скачать здесь.

Последнее обновление ( 21.09.2010 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги