Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Общие идеи искусственного интеллекта arrow Создаем искусственный интеллект. Урок 6. Начинаем программировать объекты ИИ.
25.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
Я принимаю Яндекс.Деньги