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

Создаем искусственный интеллект. Урок 6. Начинаем программировать объекты ИИ.

На прошлых пяти уроках была только теория. Сегодня мы приступим к практике. И так, для начала мы реализуем на Delphi механизм пространства состояний. Для этого нам потребуется класс TIIProblemSpace (Пространство состояний) и TIIStateItem (Элемент пространства состояний). Начнем с того, что спроектируем структуру данных, запрограммируем ее, а потом будем постепенно расширять функционал, пока не создадим полноценный класс пространства состояний. Давайте объявим нужные нам классы:

TIIStateItem=class(TObject)
protected
    FExits:TList;
    function GetItem(index:integer):TIIStateItem;
    function GetCount:integer;
public
    property Exits[index:integer]:TIIStateItem read GetItem;
    property ExitsCount:integer read GetCount;
    constructor Create;
    destructor Destory;
end;

TIIProblemSpace=class(TObject)
protected
    FEnter:TIIStateItem;
    FCurrentItem:TIIStateItem;
    FItems:TList;
public
    property Enter:TIIStateItem read FEnter;
    property CurrentItem:TIIStateItem read FCurrentItem;
    constructor Create;
    destructor Destory;
    procedure Add(Item:TIIProblemSpace);
    procedure Clear;
end;

Теперь описание структуры данных. Вернемся еще раз уроку 2 и посмотрим на схему путей в лабиринте. Мы видим граф. Каждая его вершина может быть соединенная с одной или несколькими другими вершинами. Таким образом, для реализации вершин у нас имеется класс TIIStateItem, а для реализации связей свойство Exits,  (выходы). Это свойство является коллекцией объектов TIIStateItem - список вершин, куда можно выйти из заданной вершины.

TIIProblemSpace - это у нас, собственно говоря и есть пространство состояний.   Оно содержит внутри себя список вершин графа, текущую вершину - CurrentItem и вершину, с которой мы вошли сюда - Enter.

Теперь займемся реализацией методов:

// *********************** TIIStateItem *******************
function TIIStateItem.GetItem(index:integer):TIIStateItem;
begin
     result:=FExits[index];
end;

constructor TIIStateItem.Create;
begin
   inherited Create;
   FExits:=TList.Create;
end;

function TIIStateItem.GetCount:integer;
begin
    Result:=FExits.Count;
end;

destructor TIIStateItem.Destory;
begin
   FreeAndNil(FExits);
   inherited Destroy;
end;

// ********************** TIIProblemSpace ********************
constructor TIIProblemSpace.Create;
begin
   inherited Create;
   FItems:=TList.Create;
   FCurrentItem:=nil;
   FEnter:=nil;
end;

destructor TIIProblemSpace.Destory;
begin
   Clear;
   inherited Destroy;
end;

procedure TIIProblemSpace.Add(Item:TIIProblemSpace);
begin
     FItems.Add(Item);
end;

procedure TIIProblemSpace.Clear;
var i,cn:integer;
begin
    cn:=FItems.Count-1;
    for i:=0 to cn do TIIStateItem(FItems[i]).Free;
    FItems.Clear;
end;

Думаю, реализация всех методов достаточно проста и не требует каких либо комментариев. Разве что могу сказать про процедуру Clear - она очищает память, занятую списком вершин, дело в том что деструктор класса TList сам этого делать не умеет, он удаляет только из списка ссылки на объекты, но не сами объекты. Так же стоит заметить что в конструкторе TIIProblemSpace мы инициализируем свойства  CurrentItem и Enter, присваивая им начальное значение nil.

И так, мы реализовали заготовку классов для написания механизма работы с пространством состояний. На следующем уроке мы будем расширять их функционал, что бы в конце концов, создать нашу первую программу искуственного интеллекта.

 

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