Возможности применения технологий искусственного интеллекта в компьютерных играх
Гносеологический анализ проблемы искусственного интеллекта. Аспекты представления знаний. Рефлексия как составляющих интеллектуальной деятельности. Выбор среды разработки. Создание пользовательского интерфейса. Алгоритм размещения знаков на игровом поле.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.11.2015 |
Размер файла | 166,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Развитие систем искусственного интеллекта за последние десятилетия идет по этому пути. Однако степень продвижения в данном направлении в отношении каждого из указанных познавательных орудий неодинакова и в целом пока незначительна.
В наибольшей мере системы искусственного интеллекта используют формально-логические структуры, что обусловлено их неспецифичностью для мышления и, в сущности, алгоритмическим характером. Это дает возможность относительно легкой их технической реализации. Однако даже здесь кибернетике предстоит пройти большой путь. В системах искусственного интеллекта еще слабо используются модальная, императивная, вопросная и иные логики, которые функционируют в человеческом интеллекте и не менее необходимы для успешных познавательных процессов, чем давно освоенные логикой, а затем и кибернетикой формы вывода. Повышение "интеллектуального" уровня технических систем, безусловно, связано не только с расширением применяемых логических средств, но и с более интенсивным их использованием (для проверки информации на непротиворечивость, конструирования планов вычислений и т. д.).
Намного сложнее обстоит дело с семиотическими системами, без которых интеллект невозможен. Языки, используемые в ЭВМ, еще далеки от семиотических структур, которыми оперирует мышление.
Прежде всего, для решения ряда задач необходимо последовательное приближение семиотических систем, которыми наделяется ЭВМ, к естественному языку, точнее, к использованию его ограниченных фрагментов. В этом плане предпринимаются попытки наделить входные языки ЭВМ универсалиями языка, например, полисемией (которая элиминируется при обработке в лингвистическом процессоре). Разработаны проблемно-ориентированные фрагменты естественных языков, достаточные для решения системой ряда практических задач. Наиболее важным итогом этой работы является создание семантических языков (и их формализация), в которых слова-символы имеют интерпретацию.
Однако многие универсалии естественных языков, необходимые для выполнения ими познавательных функций, в языках искусственного интеллекта пока реализованы слабо (например, открытость) или используются ограниченно (например, полисемия). Все большее воплощение в семиотических системах универсалий естественного языка, обусловленных его познавательной функцией, выступает одной из важнейших линий совершенствования систем искусственного интеллекта, особенно тех, в которых проблемная область заранее жестко не определена.
Современные системы искусственного интеллекта способны осуществлять перевод с одномерных языков на многомерные. В частности, они могут строить диаграммы, схемы, чертежи, графы, высвечивать на экранах кривые и т. д. ЭВМ производят и обратный перевод (описывают графики и тому подобное с помощью символов). Такого рода перевод является существенным элементом интеллектуальной деятельности. Но современные системы искусственного интеллекта пока не способны к непосредственному (без перевода на символический язык) использованию изображений или воспринимаемых сцен для "интеллектуальных" действий. Поиск путей глобального (а не локального) оперирования информацией составляет одну из важнейших и перспективных задач теории искусственного интеллекта.
Воплощение в информационные массивы и программы систем искусственного интеллекта аналогов категорий находится пока в начальной стадии. Аналоги некоторых категорий (например, "целое", "часть", "общее", "единичное") используются в ряде систем представления знаний, в частности в качестве "базовых отношений", в той мере, в какой это необходимо для тех или иных конкретных предметных или проблемных областей, с которыми взаимодействуют системы.
В формализованном понятийном аппарате некоторых систем представления знаний предприняты отдельные (теоретически существенные и практически важные) попытки выражения некоторых моментов содержания и других категорий (например, "причина", "следствие"). Однако ряд категорий (например, "сущность", "явление") в языках систем представления знаний отсутствует. Проблема в целом разработчиками систем искусственного интеллекта в полной мере еще не осмыслена, и предстоит большая работа философов, логиков и кибернетиков по внедрению аналогов категорий в системы представления знаний и другие компоненты интеллектуальных систем. Это одно из перспективных направлений в развитии теории и практики кибернетики.
Современные системы искусственного интеллекта почти не имитируют сложную иерархическую структуру образа, что не позволяет им перестраивать проблемные ситуации, комбинировать локальные части сетей знаний в блоки, перестраивать эти блоки и т. д.
Не является совершенным и взаимодействие вновь поступающей информации с совокупным знанием, фиксированным в системах. В семантических сетях и фреймах, использующихся при представлении знаний, пока недостаточно используются методы, благодаря которым интеллект человека легко пополняется новой информацией, находит нужные данные, перестраивает свою систему знаний и т. д.
Еще в меньшей мере современные системы искусственного интеллекта способны активно воздействовать на внешнюю среду, без чего не может; осуществляться самообучение и вообще совершенствование "интеллектуальной" деятельности.
Таким образом, хотя определенные шаги к воплощению гносеологических характеристик мышления в современных системах искусственного интеллекта сделаны, но в целом эти системы еще далеко не владеют комплексом гносеологических орудий, которыми располагает человек и которые необходимы для выполнения совокупности функций абстрактного мышления. Чем больше характеристики систем искусственного интеллекта будут приближены к гносеологическим характеристикам мышления человека, тем ближе будет их "интеллект" к интеллекту человека, точнее, тем выше будет их способность к комбинированию знаковых конструкций, воспринимаемых и интерпретируемых человеком в качестве решения задач и вообще воплощения мыслей.
В связи с этим возникает сложный вопрос. При анализе познавательного процесса гносеология абстрагируется от психофизиологических механизмов, посредством которых реализуется этот процесс. Но из этого не следует, что для построения систем искусственного интеллекта эти механизмы не имеют значения. Вообще говоря, не исключено, что механизмы, необходимые для воплощения неотъемлемых характеристик интеллектуальной системы, не могут быть реализованы в цифровых машинах или даже в любой технической системе, включающей в себя только компоненты неорганической природы. Иначе говоря, в принципе не исключено, что, хотя мы можем познать все гносеологические закономерности, обеспечивающие выполнение человеком его познавательной функции, но их совокупность реализуема лишь в системе, субстратно тождественной человеку.
Такой взгляд обосновывается X. Дрейфусом. "Телесная организация человека, - пишет он, - позволяет ему выполнять... функции, для которых нет машинных программ - таковые не только еще не созданы, но даже не существуют в проекте... Эти функции включаются в общую способность человека к приобретению телесных умений и навыков. Благодаря этой фундаментальной способности наделенный телом субъект может существовать в окружающем его мире, не пытаясь решить невыполнимую задачу формализации всего и вся".
Как отмечают специалисты, подчеркивание значения "телесной организации" для понимания особенностей психических процессов, в частности возможности восприятия, заслуживает внимания. Качественные различия в способности конкретных систем отражать мир тесно связаны с их структурой, которая хотя и обладает относительной самостоятельностью, но не может преодолеть некоторых рамок, заданных субстратом. В процессе биологической эволюции совершенствование свойства отражения происходило на основе усложнения нервной системы, т. е. субстрата отражения. Не исключается также, что различие субстратов ЭВМ и человека может обусловить фундаментальные различия в их способности к отражению, что ряд функций человеческого интеллекта в принципе недоступен таким машинам.
Иногда в философской литературе утверждается, что допущение возможности выполнения технической системой интеллектуальных функций человека означает сведение высшего (биологического и социального) к низшему (к системам из неорганических компонентов) и, следовательно, противоречит материалистической диалектике. Однако в этом рассуждении не учитывается, что пути усложнения материи однозначно не предначертаны и не исключено, что общество имеет возможность создать из неорганических компонентов (абстрактно говоря, минуя химическую форму движения) системы не менее сложные и не менее способные к отражению, чем биологические. Созданные таким образом системы являлись бы компонентами общества, социальной формой движения. Следовательно, вопрос о возможности передачи интеллектуальных функций техническим системам, и в частности о возможности наделения их рассмотренными в работе гносеологическими орудиями, не может быть решен только исходя из философских соображений. Он должен быть подвергнут анализу на базе конкретных научных исследований.
X. Дрейфус подчеркивает, что ЭВМ оперирует информацией, которая не имеет значения, смысла. Поэтому для ЭВМ необходим перебор огромного числа вариантов. Телесная организация человека, его организма позволяет отличать значимое от незначимого для жизнедеятельности и вести поиск только в сфере первого. Для "нетелесной" ЭВМ, утверждает Дрейфус, это недоступно. Конечно, конкретный тип организации тела позволяет человеку ограничивать пространство возможного поиска. Это происходит уже на уровне анализаторной системы. Совсем иначе обстоит дело в ЭВМ. Когда в кибернетике ставится общая задача, например, распознания образов, то эта задача переводится с чувственно-наглядного уровня на абстрактный. Тем самым снимаются ограничения, не осознаваемые человеком, но содержащиеся в его "теле", в структуре органов чувств и организма в целом. Они игнорируются ЭВМ. Поэтому пространство поиска резко увеличивается. Это значит, что к "интеллекту" ЭВМ предъявляются более высокие требования (поиска в более обширном пространстве), чем к интеллекту человека, к которому приток информации ограничен физиологической структурой его тела.
Системы, обладающие психикой, отличаются от ЭВМ, прежде всего тем, что им присущи биологические потребности, обусловленные их материальным, биохимическим субстратом. Отражение внешнего мира происходит сквозь призму этих потребностей, в чем выражается активность психической системы. ЭВМ не имеет потребностей, органически связанных с ее субстратом, для нее как таковой информация незначима, безразлична. Значимость, генетически заданная человеку, имеет два типа последствий. Первый - круг поиска сокращается, и, тем самым, облегчается решение задачи. Второй - нестираемые из памяти фундаментальные потребности организма обусловливают односторонность психической системы. Дрейфус пишет в связи с этим: "Если бы у нас на Земле очутился марсианин, ему, наверное, пришлось бы действовать в абсолютно незнакомой обстановке; задача сортировки релевантного и нерелевантного, существенного и несущественного, которая бы перед ним возникла, оказалась бы для него столь же неразрешимой, как и для цифровой машины, если, конечно, он не сумеет принять в расчет никаких человеческих устремлений". С этим нельзя согласиться. Если "марсианин" имеет иную биологию, чем человек, то он имеет и иной фундаментальный слой неотъемлемых потребностей, и принять ему "человеческие устремления" значительно труднее, чем ЭВМ, которая может быть запрограммирована на любую цель [11].
Животное в принципе не может быть по отношению к этому фундаментальному слою перепрограммировано, хотя для некоторых целей оно может быть запрограммировано вновь посредством дрессировки. В этом (но только в этом) смысле потенциальные интеллектуальные возможности машины шире таких возможностей животных. У человека над фундаментальным слоем биологических потребностей надстраиваются социальные потребности, и информация для него не только биологически, но и социально значима. Человек универсален и с точки зрения потребностей и с точки зрения возможностей их удовлетворения. Однако эта универсальность присуща ему как социальному существу, производящему средства целесообразной деятельности, в том числе и системы искусственного интеллекта.
Таким образом, телесная организация не только дает дополнительные возможности, но и создает дополнительные трудности. Поэтому интеллекту человека важно иметь на вооружении системы, свободные от его собственных телесных и иных потребностей, пристрастий. Конечно, от таких систем неразумно требовать, чтобы они самостоятельно распознавали образы, классифицировали их по признакам, по которым это делает человек. Им цели необходимо задавать в явной форме.
Вместе с тем следует отметить, что технические системы могут иметь аналог телесной организации. Развитая кибернетическая система обладает рецепторными и эффекторными придатками. Начало развитию таких систем положили интегральные промышленные роботы, в которых ЭВМ в основном выполняет функцию памяти. В роботах третьего поколения ЭВМ выполняет и "интеллектуальные" функции. Их взаимодействие с миром призвано совершенствовать их "интеллект". Такого рода роботы имеют "телесную организацию", конструкция их рецепторов и эффекторов содержит определенные ограничения, сокращающие пространство, в котором, абстрактно говоря, могла бы совершать поиск цифровая машина.
Тем не менее, совершенствование систем искусственного интеллекта на базе цифровых машин может иметь границы, из-за которых переход к решению интеллектуальных задач более высокого порядка, требующих учета глобального характера переработки информации и ряда других гносеологических характеристик мышления, невозможен на дискретных машинах при сколь угодно совершенной программе. Это значит, что техническая (а не только биологическая) эволюция отражающих систем оказывается связанной с изменением материального субстрата и конструкции этих систем. Такая эволюция, т. е. аппаратурное усовершенствование систем искусственного интеллекта, например, через более интенсивное использование аналоговых компонентов, гибридных систем, голографии и ряда других идей, будет иметь место. При этом не исключается использование физических процессов, протекающих в мозгу, и таких, которые психика в качестве своих механизмов не использует. Наряду с этим еще далеко не исчерпаны возможности совершенствования систем искусственного интеллекта путем использования в функционировании цифровых машин гносеологических характеристик мышления, о которых речь шла выше.
В последнее время при анализе проблем, связанных с искусственным интеллектом, часто применяют математический аппарат нечетких множеств, идея и реализация которого принадлежит американскому математику Л.А.Заде. Суть его подхода состоит в своего рода некотором отказе от принципа детерминизма. Пожалуй, наиболее поразительным свойством человеческого интеллекта является способность принимать правильные решения в обстановке неполной и нечеткой информации. Построение моделей приближенных рассуждений человека и использование их в компьютерных системах будущих поколений представляет сегодня одну из важнейших проблем науки. Смещение центра исследований нечетких систем в сторону практических приложений привело к постановке целого ряда проблем таких, как новые архитектуры компьютеров для нечетких вычислений, элементная база нечетких компьютеров и контроллеров, инструментальные средства разработки, инженерные методы расчета и разработки нечетких систем управления и многое другое. Математическая теория нечетких множеств, предложенная Л.А.Заде около тридцати лет назад, позволяет описывать нечеткие понятия и знания, оперировать этими знаниями и делать нечеткие выводы. Основанные на этой теории методы построения компьютерных нечетких систем существенно расширяют области применения компьютеров. В последнее время нечеткое управление является одной из самых активных и результативных областей исследований применения теории нечетких множеств. Нечеткое управление оказывается особенно полезным, когда технологические процессы являются слишком сложными для анализа с помощью общепринятых количественных методов, или, когда доступные источники информации интерпретируются качественно, неточно или неопределенно. Экспериментально показано, что нечеткое управление дает лучшие результаты, по сравнению с получаемыми при общепринятых алгоритмах управления. Нечеткие методы помогают управлять домной и прокатным станом, автомобилем и поездом, распознавать речь и изображения, проектировать роботов, обладающих осязанием и зрением. Нечеткая логика, на которой основано нечеткое управление, ближе по духу к человеческому мышлению и естественным языкам, чем традиционные логические системы. Нечеткая логика, в основном, обеспечивает эффективные средства отображения неопределенностей и неточностей реального мира. Наличие математических средств отражения нечеткости исходной информации позволяет построить модель, адекватную реальности.
3. Реализация программы с искусственным интеллектом
3.1 Описание программы
В данной работе речь пойдет о создании оконной игровой программы «Гомоку», которая и будет являться объектом исследования.
Гомоку - японское название древней китайской логической игры. Игра берёт своё название от японского слова гомокунарабэ, что означает «пять штук в ряд». Игра ведётся на доске (гобан), расчерченной линиями. Традиционный вариант предусматривает игру на поле 19?19, в спортивном варианте используется поле 15?15. Игроки поочерёдно выставляют на доску камни чёрного и белого цвета. Цель игры состоит в построении одним из игроков непрерывного ряда ровно из пяти камней своего цвета по вертикали, горизонтали или диагонали.
Компьютерная версия логической игры «Крестики - нолики» предоставляет возможность игры с компьютером. Приложение носит развлекательный характер, тренирует логическое мышление, способность выстраивать стратегии в определенных условиях. Так же в компьютерной игре будем использовать поле 10?10, чего вполне достаточно, для того чтобы показать логику искусственного интеллекта.
Логика искусственного интеллекта довольно сложна, но в то же время полностью не охватывает тактику игры. Несмотря на это, играть с компьютером довольно интересно.
Описание правил игры «Крестики - нолики».
Правила игры, следующие: игроки по очереди, ставят на свободные клетки поля 10х10 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд пять своих фигур по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает игрок, ставящий крестики, в нашем случае пользователь.
Целью данной работы будет разработать программу, реализующую игру «Гомоку» в режиме пользователь - компьютер. Наиболее важные алгоритмы этой игры: проверка на победу, проверка на возможность хода (не занята ли клетка), обработка кликов мыши, алгоритм ходов компьютера (ноликов). В процессе реализации данной задачи использовать основные свойства объектно-ориентированного программирования. В программе должны быть учтены моменты, позволяющие пользователю легко освоить программу, для этого необходимо создать удобный интерфейс, который является «визитной карточкой» приложения.
Задача будет состоять в реализации данной задачи наиболее оптимальными методами и с минимальной тратой ресурсов.
3.2 Выбор языка разработки
Язык С# и связанную с ним среду .NET Framework можно без преувеличения назвать самой значительной из предлагаемых в настоящее время технологий для разработчиков. Среда .NET является такой средой, которая была создана для того, чтобы в ней можно было разрабатывать практически любое приложение для запуска в Windows, а С# является языком программирования, который был специально создан для использования в .NET Framework. Например, с применением С# и .NET Framework можно создавать динамические веб-страницы, приложения Windows Presentation Foundation, веб-службы XML, компоненты для распределенных приложений, компоненты для доступа к базам данных, классические настольные приложения Windows и даже клиентские приложения нового интеллектуального типа, обладающие возможностями для работы в оперативном и автономном режимах.
Создание C#. Язык C# был разработан корпорацией Microsoft в конце 90-х годов как часть общей стратегии .NET. Впервые он был выпущен в виде альфа-версии в середине 2000 года. Главным разработчиком С# был Андерс Хейльсберг -- один из ведущих в мире специалистов по языкам программирования, который может похвалиться рядом заметных достижений в данной области. Достаточно сказать, что в 80-е годы он был автором очень удачной и имевшей большое значение разработки -- языка Turbo Pascal, изящная реализация которого послужила образцом для создания всех последующих компиляторов.
Язык С# непосредственно связан с С, С++ и Java. И это не случайно. Ведь это три самых широко распространенных и признанных во всем мире языка программирования. Кроме того, на момент создания С# практически все профессиональные программисты уже владели С, С++ или Java. Благодаря тому, что С# построен на столь прочном и понятном основании, перейти на этот язык из С, С++ или Java не представляло особого труда. А поскольку и Хейльсбергу не нужно (да и нежелательно) было изобретать велосипед то он мог сосредоточиться непосредственно на усовершенствованиях и нововведениях в С#.
Предком С# во втором поколении является С, от которого он унаследовал синтаксис, многие ключевые слова и операторы. Кроме того, С# построен на усовершенствованной объектной модели, определенной в С++. Если вы знаете С или С++, то будете чувствовать себя уютно и с языком С#.
Родственные связи С# и Java более сложные. Java также происходит от С и С++ и обладает общим с ними синтаксисом и объектной моделью. Как и Java, С# предназначен для получения переносимого кода, но С# не происходит непосредственно от Java. Напротив, С# и Java -- это близкие, но не кровные родственники, имеющие общих предков, но во многом отличающиеся друг от друга.
В С# имеется немало новых средств, но самое важное из них связано со встроенной поддержкой программных компонентов. В действительности С# может считаться компонентно-ориентированным языком программирования, поскольку в него внедрена встроенная поддержка написания программных компонентов. Например, в состав С# входят средства прямой поддержки таких составных частей программных компонентов, как свойства, методы и события. Но самой важной компонентно-ориентированной особенностью этого языка, вероятно, является возможность работы в безопасной среде многоязыкового программирования.
3.3 Выбор среды разработки
В качестве среды разработки будем использовать Visual Studio 2013 так как усовершенствованные инструменты разработки и контроля в Visual Studio повышают скорость создания и запуска нового приложения, обеспечивают удобство и эффективность командной работы и раскрывают преимущества и функциональность новой операционной системы Windows 8 и мобильной платформы Windows Phone.
Новый продукт Visual Studio 2013 доступен в России не только профессиональным разработчикам, но также студентам, увлекающимся информационными технологиями, и начинающим ИТ-компаниям, стремящимся реализовать свои инновационные идеи в конкретных программных продуктах.
Повышение производительности.
Visual Studio 2013 меняет отношение к процессу разработки, делая его увлекательным и хорошо организованным. Новый продукт отличается повышенной скоростью загрузки рабочей среды и открывает разработчикам доступ к конкретным проектам буквально в считанные секунды. Кроме того, все длительные процессы выполняются в Visual Studio 2013 в фоновом режиме, что не замедляет скорость работы среды и не отвлекает разработчика от основных задач.
Также рабочая среда Visual Studio 2013 имеет новый контекстно-зависимый интерфейс. Главная его особенность заключается в том, что он предлагает разработчику только те функции и инструменты, которые ему нужны на данном этапе работы. Таким образом, панель инструментов не содержит ничего лишнего и не затрудняет поиск нужных функций.
Кстати о функциях: среда для разработки Visual Studio 2013 создана так, чтобы помогать разработчику и подсказывать ему наилучшие решения. Для этого в продукт были включены специальные технологии, которые упрощают и ускоряют работу. Например, функция Code Clone ищет одинаковые по функционалу коды и объединяет их в соответствующие модули для того, чтобы разработчик впоследствии мог воспользоваться уже готовым кодом при создании нового приложения.
Удобство командной работы
Visual Studio 2013 позволяет эффективно управлять полным жизненным циклом приложения от этапа его разработки до стадии эксплуатации. Такой подход предполагает командную работу и участие в процессе большого количества специалистов разного профиля: от архитекторов и разработчиков до дизайнеров и заказчиков проекта.
Консолидацию всех циклов работы над приложением и взаимодействие рабочей группы в Visual Studio 2013 обеспечивает усовершенствованное решение Team Foundation Server. С его помощью все участники процесса разработки могут отслеживать состояние проекта, видеть его динамику, контролировать сроки и получать аналитические отчёты о каждом периоде работы.
Кроме того, Visual Studio 2013 содержит обновлённые инструменты проверки качества и работоспособности приложения, что позволяет тестировщикам моделировать поведение приложения в момент его использования, а также вовремя обнаруживать недочёты в разработке. А функция PowerPoint StoryBoarding позволяет техническим специалистам представлять макет будущего решения заказчику в понятном для него формате.
Поддержка платформы Windows
Visual Studio 2013 позволяет создавать современные, конкурентоспособные приложения для разных устройств и сред, но наиболее эффективен продукт при интеграции с платформой Windows, в частности с новой операционной системой Windows 8, мобильной платформой Windows Phone и облачной платформой Windows Azure [12].
Это среда, которая позволяет создавать решения для приложения Windows Store. Visual Studio 2013 включает полный набор инструментов - от заготовленных шаблонов приложений до специального редактора интерфейсов Expression Blend - и полностью автоматизирует весь процесс создания приложения для Windows Store, включая этапы тестирования и публикации в магазине приложений. Таким образом, разработчик может полностью сконцентрироваться на реализации своей идеи и в кратчайшие сроки превратить её в конкретное приложение.
3.4 Создание пользовательского интерфейса в Visual C#
Быстрота и удобство создания пользовательских интерфейсов в Visual C# для приложений Windows обеспечивается благодаря конструктору Windows Forms и панели элементов.
В создании пользовательских интерфейсов для приложений Windows Forms имеются три основных этапа:
- добавление элементов управления на поверхность разработки;
- установка начальных свойств для элементов управления;
- написание обработчиков для заданных событий.
Хотя пользовательский интерфейс можно создать, написав собственный код, с помощью конструкторов это можно сделать намного быстрее.
Рисунок 1 - Вид элементов управления
Добавление элементов управления.
Элементы управления, такие как кнопки и текстовые поля, можно перетащить мышью на поверхность разработки, представляющую форму. На рисунке ниже показано поле со списком, которое при помощи перетаскивания из панели элементов было добавлено в форму в конструкторе Windows Forms.
При работе в визуальном режиме конструктор преобразует выполняемые действия в исходный код C# и записывает их в файл проекта. Когда приложение будет выполнено, исходный код разместит элементы пользовательского интерфейса и скорректирует их размер таким образом, как они отображаются на поверхности разработки.
Задание свойств.
После добавления элемента управления в форму в окне Свойства можно задать его свойства, такие как цвет фона и текст по умолчанию. Значения, задаваемые в окне Свойства, являются начальными значениями, которые будут назначены соответствующему свойству при создании элемента управления во время выполнения. Во многих случаях доступ к значениям и их изменение возможно программными средствами во время выполнения путем получения или установки свойств в экземпляре класса элемента управления в приложении. Окно Свойство может оказаться полезным во время выполнения, так как с его помощью можно просматривать все свойства, события и методы, поддерживаемые элементом управления.
Обработка событий. Программы с графическим интерфейсом пользователя главным образом основаны на событиях. Такие программы ожидают действий пользователя, например, ввода текста в текстовое поле, нажатия кнопки или изменения выбора в поле со списком. При выполнении действия элемент управления, который всего лишь представляет собой экземпляр класса .NET Framework, отправляет событие в приложение. Для обработки события можно написать специальный метод в приложении, который будет вызван при получении события.
В окне Свойства можно указать события, которые должны обрабатываться в коде. Для просмотра событий элемента управления следует выбрать его в конструкторе и нажать кнопку События с изображением молнии в окне Свойства. Следующая схема отображает кнопку событий.
При добавлении обработчика событий с использованием окна Свойства конструктор автоматически напишет основную часть пустого метода, а пользователь должен написать код, на основе которого метод будет выполнять необходимые действия. Большинство элементов управления создают много событий, но приложению часто придется обрабатывать лишь часть из них или даже только одно. Например, возможно потребуется обработать событие Click для кнопки, но не ее событие Paint, если только нет необходимости изменить ее внешний вид каким-либо дополнительным способом. Для каждого элемента управления существует обработчик событий, определенный по умолчанию. Чтобы создать обработчик событий по умолчанию, дважды щелкните элемент управления в форме. Будет создан обработчик событий и откроется редактор кода для написания события для обработки события.
3.5 Конструкции, реализованные в программе
Это оконное приложение использует множество функций и методов для графического интерфейса программы. Так как нам постоянно приходится получать координаты щелчка, рисовать линии, эллипсы, прямоугольники, закрашивать в разные цвета. Также нам потребовались такие компоненты как pictureBox, Button, Edit, Label.
Компонент Button находится на вкладке панель управления, стандартные элементы управления. Этот компонент создает на форме, на которой он помещен, элемент «кнопка», который надо нажимать щелчком левой кнопки мыши. Этот компонент обладает свойствами, определяющими его поведение. Нам понадобится свойство Text. В него помещается название кнопки. И событие Click, которое возникает, когда на кнопке щелкают мышью. Компонент Label находится на вкладке на вкладке панель управления, стандартные элементы управления. Этот компонент выводит на форму текст, который пользователь в режиме исполнения приложения не может редактировать. Этот текст может использоваться как метка к другому компоненту и может устанавливать фокус компонента, когда пользователь нажимает горячую клавишу на клавиатуре.
Компонент Edit находится на вкладке на вкладке панель управления, стандартные элементы управления. Этот компонент задает в форме однострочное редактируемое поле: через этот компонент вводят и выводят строчные данные. Нам понадобится его свойство Text. В нем задается текст, который мы видим в поле компонента.
Компонент pictureBox на вкладке на вкладке панель управления, стандартные элементы управления. Через этот компонент в форму выводится графическое изображение. Мы будем пользоваться свойством BackColor. Это битовая карта плоскости для рисования на ней различных изображений. Это свойство само является классом со своими свойствами и методами, позволяющими рисовать изображение.
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
// рисуем линию
g. DrawLine(new Pen(Color.Black, 1), 1, 1, 100, 100);
}
Данный пример соединит две точки с координатами (1,1) и (100,100) линией черного цвета в толщину 1 пиксель. На основе данных знаний нарисуем 11 горизонтальных и вертикальных линий которые будут составлять сетку для нашего приложения. Для упрощения процесса разработки выберем ширину и высоту доски равной в 400 пикселей. Для этого в визуальном редакторе изменим атрибут size у pictureBox1 на 401х401 пикселей. В данном случае на каждую клетку будет отведено по 39 пикселей и 11 линий по 1 пикселю, которые в сумме дают 401 пиксель. Для рисования сетки нам понадобится несложный цикл.
for (int i = 0; i < 11; i++){
g.DrawLine(new Pen(Color.Black, 1), 0, 40 * i, 400, 40 * i); // горизонтальные линии
g.DrawLine(new Pen(Color.Black, 1), 40 * i, 0, 40 * i, 400); // вертикальные линии
}
Дальше нам необходимо написать функции, которые будут рисовать крестик и нолик в данной сетке. Данные функции будут принимать значения в которой клетке необходимо нарисовать крестик или нолик.
private void print_x(Graphics g, int colum_x, int colum_y) {
g.DrawLine(new Pen(Color.Black, 1), colum_x * 40 + 6, colum_y * 40 + 6, colum_x * 40 + 34, colum_y * 40 + 34);
g.DrawLine(new Pen(Color.Black, 1), colum_x * 40 + 6, colum_y * 40 + 34, colum_x * 40 + 34, colum_y * 40 + 6);
}
private void print_o(Graphics g, int colum_x, int colum_y) {
g.DrawEllipse(new Pen(Color.Brown, 1), colum_x * 40 + 4, colum_y * 40 + 4, 32, 32);
}
Координатная точка -- тип данных, довольно распространенный в графических средах. В двумерной координатной системе (такой как поверхность видеодисплея или лист бумаги принтера) точка обозначается обычно парой чисел (x и y), где х -- горизонтальная координата, a y - вертикальная координата. Можно использовать Click в любой двумерной системе координат. Эта функция может выдавать нам координаты наших щелчков.
private void pictureBox1_Click(object sender, EventArgs e){
MouseEventArgs me = (MouseEventArgs)e;
Point coordinates = me.Location;
MessageBox.Show(string.Format("X: {0} Y: {1}", coordinates.X, coordinates.Y));
}
В данном примере мы проверяем правильность значений координат при клике мыши и выводим их в качестве всплывающего сообщения. В дальнейшем мы не будем выводить сообщение с координатами и можем сократить данную строку, определяя в какую ячейку кликнул пользователь. Номера ячеек будут начинаться с нуля.
Поэтому немного изменив код программы получим значения в какую ячейку был сделан клик. Так же стоит отметить что для упрощения процесса просчета в какую ячейку кликнул пользователь будем считать, что верхняя и левая линии от ячейки является ее частью. Для нижних ячеек и ячеек справа так же будет включена нижняя линия и линия справа.
private void pictureBox1_Click(object sender, EventArgs e){
int position_x,position_y;
MouseEventArgs me = (MouseEventArgs)e;
position_x = me.Location.X / 40;
position_y = me.Location.Y / 40;
if (position_x == 10) { position_x = 9; }
if (position_y == 10) { position_y = 9; }
}
3.6 Алгоритм размещения знаков на игровом поле
Игровое поле нужно как-то хранить в памяти компьютера. Наиболее простая реализация - в виде матрицы 10x10 клеток (ячеек). Определим соответствующий тип и переменные, которые нам понадобятся:
int[,] mas = new int[10,10];
Возьмем за основу то, что пустая ячейка будет иметь значение 0, ячейка, в которой находится крестик 1, а ячейка, в которой находится нолик 2.
3.7 Алгоритм проверки выигрыша
По правилам игры для победы надо набрать по вертикали, горизонтали или диагонали подряд количество крестиков/ноликов, равное переменной 5. И только если найдется такая цепочка из знаков, тогда будет окончена игра, и будет объявлен победитель. Так как проверка по диагонали значительно отличается от проверки по вертикали и горизонтали, то реализуем две отдельные методы проверки выигрыша. Так же необходимо учесть что необходимо проводить проверку для обоих игроков.
private void Game_end(){
int gamer_user = 0, gamer_pc = 0;
// тут проверка на победу по вертикали
for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++)
{
if (mas[i, j] == 0) { gamer_user = 0; gamer_pc = 0; }
if (mas[i, j] == 1) { gamer_user++; gamer_pc = 0; }
if (mas[i, j] == 2) { gamer_user = 0; gamer_pc++; }
if (gamer_user >= 5) { /* тут победил пользователь*/ }
if (gamer_pc >= 5) { /* тут победил компьютер*/ }
}
// тут проверка на победу по горизонтали
for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++)
{
if (mas[j, i] == 0) { gamer_user = 0; gamer_pc = 0; }
if (mas[j, i] == 1) { gamer_user++; gamer_pc = 0; }
if (mas[j, i] == 2) { gamer_user = 0; gamer_pc++; }
if (gamer_user >= 5) { /* тут победил пользователь*/ }
if (gamer_pc >= 5) { /* тут победил компьютер*/ }
}
}
Для проверки по диагоналям реализуем новую функцию. Которая будет принимать координаты ячейки, для которой необходимо проверить диагональ и так же будем учитывать направление проверки диагонали, логической переменной.
private void Game_end_diagonal(int x, int y, bool a)
{
int gamer_user = 0, gamer_pc = 0;
// тут проверка на победу по диагонали
while (true)
{
if ((x < 0 || x >= 10) || (y < 0 || y >= 10)) { break; }
if (mas[x][y] == 0) { gamer_user = 0; gamer_pc = 0; }
if (mas[x][y] == 1) { gamer_user++; gamer_pc = 0; }
if (mas[x][y] == 2) { gamer_user = 0; gamer_pc++; }
if (a) { x++; y++; } else { x++; y--; }
if (gamer_user >= 5) { /* тут победил пользователь*/ }
if (gamer_pc >= 5) { /* тут победил компьютер*/ }
}
}
Данную функцию будет необходимо вызывать 4 раза, для различных направлений диагоналей.
Данную реализацию возможно оптимизировать под данную реализацию, но это может занять значительное время, незначительно улучшив производительность.
Примеры вызова будем выглядеть следующим образом:
// тут проверка по главной диагонали
for (int i = 0; i < 10; i++) { Game_end_diagonal (0, i, true); }
for (int i = 1; i < 10; i++) { Game_end_diagonal (i, 0, true); }
// тут проверка по второстепенной диагонали
for (int i = 0; i < 10; i++) { Game_end_diagonal (0, i, false); }
for (int i = 1; i < 10; i++) { Game_end_diagonal (i, 9, false); }
3.8 Алгоритм размещения знаков компьютера на поле
Как известно из правил игры, на поле игры должны совпасть пять одинаковых знаков. Для расстановки знаков компьютером использован алгоритм, который вычисляет самую выгодную (приоритетную) клетку поля. Процедура, расставляющая знаки компьютера, должна выполнять следующие действия: взять свободную клетку и проверить, насколько она выгодна для хода. Для начала создадим алгоритм, который вычисляет приоритетность для каждой клетки поля, в зависимости от ее положения на поле и запишем данные значения в массив. Самые приоритетные клетки - это клетки, находящиеся в центре поля, так как от них можно построить любой продолжительности цепочки, и в любую сторону. Самые «не выгодные» клетки - это клетки по периметру поля, так как от них можно построить цепочку по одному направлению. Алгоритм рассчитывает эти параметры по горизонтали и вертикали, так как эти коэффициенты разные для одной и той же клетки, то пусть коэффициент верхней левой точки будет равен 2 и двигаясь вправо увеличивается на одну единицу, пока не дойдем до середины, после чего в обратной последовательности будем уменьшать коэффициент данной точки. В конце данного алгоритма мы получим матрицу с коэффициентами для каждой точки. Хотя и данный алгоритм не является обязательным и возможно записать значения в массив указав вручную, но данный алгоритм позволяет менее безболезненно увеличивать поле для игры в дальнейшем, а также рассчитать коэффициенты по более сложному распределению коэффициентов.
int[,] mas_index = new int[10, 10];
for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++)
{
if (i < 5) { mas_index[i, j] = i + 1; } else { mas_index[i, j] = 10 - i; }
if (j < 5) { mas_index[i, j] = j + 1; } else { mas_index[i, j] = 10 - j; }
}
Данный массив инициируется в начале программы и в дальнейшем будет учитываться в расчётах коэффициентов клетки с максимальным приоритетом. Максимальное значение, которое будет храниться в данном массиве равно 12, а минимальное 2. Так как данные значения необходимы в спорных равнозначных ситуациях, то эти коэффициенты не должны иметь приоритет выше чем какой-либо другой коэффициент. Так же можно заставлять компьютер пересчитывать эти коэффициенты по дополнительному алгоритму после каждого хода игрока. Это, собственно, и все, что касается размещения знаков компьютера не зависящее от расположения знаков игрока.
Также необходимо учитывать положение своих и вражеских ходов, для этого необходимо реализовать алгоритм размещения знаков компьютера, зависящий от положения знаков игрока. Компьютеру требуется просчитать приоритетность каждой клетки, относительно клеток, где расположены знаки игрока. Для выигрыша требуется как можно быстрей продлить свою цепочку, а также помешать выиграть игроку. Выгоднее, если цепочки игрока и компьютера одинаковой длины, продлевать цепочку компьютера. Если же цепочки разной длины, то выгоднее, если цепочка игрока длиннее - перекрыть ее (т.е. поставить свой знак следующим), а если наоборот, то продлевать свою самую длинную цепочку. А если продлевать ее можно в обе стороны, то также выбираем более приоритетную клетку, в которой этот знак помещал бы противнику, или же помог нам продлевать другую нашу длинную цепочку. Алгоритм рассчитывает эти приоритеты по горизонтали:
// закрываем ход игроку ставя клетку справа от его
stepen = 1;
for (int ii = i - 1; ii >= 0; ii--)
{
stepen *= 10;
if (mas[ii,j] == 1) { koef += 1 * stepen - 1 * stepen / 10; } else { break; }
}
stepen = 1;
// Продлеваем свои клетки вправо
for (int ii = i - 1; ii >= 0; ii--)
{
stepen *= 10;
if (mas[ii,j] == 2) { koef += 2 * stepen - 2 * stepen / 10; } else { break; }
}
// закрываем ход игроку ставя клетку слева от его
stepen = 1;
for (int ii = i + 1; ii < 10; ii++)
{
stepen *= 10;
if (mas[ii,j] == 1) { koef += 1 * stepen - 1 * stepen / 10; } else { break; }
}
stepen = 1;
// Продлеваем свои клетки влево
for (int ii = i + 1; ii < 10; ii++)
{
stepen *= 10;
if (mas[ii,j] == 2) { koef += 2 * stepen - 2 * stepen / 10; } else { break; }
}
Аналогичным образом реализованы алгоритмы по вычислению приоритетов по вертикали и диагоналям. Вычислив самую приоритетную клетку, запишем в нее наше значение mas[x_max][y_max] = 2. В данном случае мы можем усложнять алгоритм коэффициентов и получить практически непобедимого соперника или же упростить алгоритм или изменить коэффициенты чтобы уменьшить уровень сложности игры. Объединив весь перечисленный код в один целый получим приложение, которое показывает пример реализации искусственного интеллекта за довольно-таки небольшой промежуток времени.
ЗАКЛЮЧЕНИЕ
Основные результаты дипломной работы состоят в следующем:
1 Изучении методов и средств решения задач в системах искусственного интеллекта, принципов построения и функционирования экспертных систем, а также освоение навыков использования языка программирования для решения задач искусственного интеллекта.
2 Повышении эффективности, в частности, увеличения наглядности в изложении условий и хода решения задач разработки программных приложений без глубокого изучения языка программирования.
3 Определении перечня основных понятий искусственного интеллекта в компьютерных играх.
4 Проведении сравнительного анализа возможностей решений проблем искусственного интеллекта при его применении в компьютерных играх.
5 Описании основных критериев игры для искусственного интеллекта и написания компьютерной игры.
6 Сравнительном анализе языков программирования и использовании наиболее подходящего для решения поставленной задачи.
7 Произведении сравнительного анализа сред разработки для выбранного языка программирования и наиболее подходящем для решения поставленной задачи.
8 Реализация компьютерной игры с применением искусственного интеллекта.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Артоболевский И. И. Знакомьтесь - роботы./ Под ред. В.А. Садовничего - М.: Горячая линия - Телеком, 2003.- 46 с.
2 Хвощ С.Т. Задачи распознавания образов - М.: Наука, 2005. -71 с.
3 Гаврилов А.В. Использование искусственных нейронных сетей для анализа данных - Новосибирск: Изд-во НГТУ, 1999.- 183 с.
4 Глушков В.М. Кибернетика: вопросы теории и практики - М.: Наука, 2007.- 14 с.
5 Кругликов Р.И. Созидающий мозг. Нейробиологические основы творчества М.: Наука, 1998.- 201 с.
6 Кузнецов Н.А., Шрейдер Ю.А. Информационное взаимодействие как объект научного исследования - М.: Наука, 2008.- 39 с.
7 Кругликов Р. И. Созидающий мозг. Нейробиологические основы творчества - М.: Наука, 2011.- 11 с.
8 Лекторский В. А. "Теория познания (гносеология, эпистемология)"// "Вопросы философии", 2013, №8
9 Лефевр В.А. "От психофизики к моделированию души."// "Вопросы философии", 1997, №7, с. 25-31.
10 Мамардашвили М.К. "Сознание как философская проблема"// "Вопросы философии", 2012, №10
11 Носов Н.А. "Виртуальная реальность"// "Вопросы философии", 2015, №10
12 Оезер Э. "Мозг, язык и мир"// "Вопросы философии", 2008, №5
13 Петрунин Ю.Ю. "Искусственный интеллект как феномен современной культуры."// "Вестник Московского университета", 2002, №8, с. 28-34.
Размещено на Allbest.ur
...Подобные документы
Сущность и проблемы определения искусственного интеллекта, его основных задач и функций. Философские проблемы создания искусственного интеллекта и обеспечения безопасности человека при работе с роботом. Выбор пути создания искусственного интеллекта.
контрольная работа [27,9 K], добавлен 07.12.2009Понятие искусственного интеллекта как свойства автоматических систем брать на себя отдельные функции интеллекта человека. Экспертные системы в области медицины. Различные подходы к построению систем искусственного интеллекта. Создание нейронных сетей.
презентация [3,0 M], добавлен 28.05.2015Области человеческой деятельности, в которых может применяться искусственный интеллект. Решение проблем искусственного интеллекта в компьютерных науках с применением проектирования баз знаний и экспертных систем. Автоматическое доказательство теорем.
курсовая работа [41,3 K], добавлен 29.08.2013Понятие искусственного интеллекта в робототехнике и мехатронике. Структура и функции интеллектуальной системы управления. Классификация и типы знаний, представление их с помощью логики предикатов. Суть семантических сетей, фреймовое представление знаний.
курс лекций [1,1 M], добавлен 14.01.2011Применение методов искусственного интеллекта и современных компьютерных технологий для обработки табличных данных. Алгоритм муравья, его начальное размещение и перемещение. Правила соединения UFO-компонентов при моделировании шахтной транспортной системы.
дипломная работа [860,8 K], добавлен 23.04.2011Эволюция систем искусственного интеллекта. Направления развития систем искусственного интеллекта. Представление знаний - основная проблема систем искусственного интеллекта. Что такое функция принадлежности и где она используется?
реферат [49,0 K], добавлен 19.05.2006Начало современного этапа развития систем искусственного интеллекта. Особенности взаимодействия с компьютером. Цель когнитивного моделирования. Перспективы основных направлений современного развития нейрокомпьютерных технологий, моделирование интеллекта.
реферат [24,7 K], добавлен 05.01.2010Сущность искусственного интеллекта, сферы человеческой деятельности, в которых он распространен. История и этапы развития данного явления. Первые идеи и их воплощение. Законы робототехники. Использование искусственного интеллекта в коммерческих целях.
реферат [40,8 K], добавлен 17.08.2015Искусственный интеллект – научное направление, связанное с машинным моделированием человеческих интеллектуальных функций. Черты искусственного интеллекта Развитие искусственного интеллекта, перспективные направления в его исследовании и моделировании.
реферат [70,7 K], добавлен 18.11.2010Может ли искусственный интеллект на данном уровне развития техники и технологий превзойти интеллект человека. Может ли человек при контакте распознать искусственный интеллект. Основные возможности практического применения искусственного интеллекта.
презентация [511,2 K], добавлен 04.03.2013Характеристика сущности искусственного интеллекта. Проблема создания искусственного интеллекта. Базовые положения, методики и подходы построения систем ИИ (логический, структурный, эволюционный, имитационный). Проблемы создания и реализация систем ИИ.
реферат [43,1 K], добавлен 19.07.2010Разработка на основе игры "Точки" подхода к программированию "искусственного интеллекта" в позиционных играх и возможность применения данного подхода для решения задач в области экономики, управления и других областях науки. Модель игровой ситуации.
дипломная работа [1,5 M], добавлен 21.07.2013История создания и основные направления в моделировании искусственного интеллекта. Проблемы обучения зрительному восприятию и распознаванию. Разработка элементов интеллекта роботов. Исследования в области нейронных сетей. Принцип обратной связи Винера.
реферат [45,1 K], добавлен 20.11.2009Проблема представления знаний в компьютерных системах – одна из основных проблем в области искусственного интеллекта. Исследование различных моделей представления знаний. Определения их понятия. Разработка операции над знаниями в логической модели.
курсовая работа [51,9 K], добавлен 18.02.2011Феномен мышления. Создание искусственного интеллекта. Механический, электронный, кибернетический, нейронный подход. Появление перцептрона. Искусственный интеллект представляет пример интеграции многих научных областей.
реферат [27,2 K], добавлен 20.05.2003Понятие и суть нечеткой логики и генетических алгоритмов. Характеристика программных пакетов для работы с системами искусственного интеллекта в среде Matlab R2009b. Реализация аппроксимации функции с применением аппарата нечеткого логического вывода.
курсовая работа [2,3 M], добавлен 23.06.2012Общая характеристика дисциплины "Основы искусственного интеллекта". Ее предмет, цели и задачи. Особенности и расшифровка ряда понятийных терминов, характеризующих сущность кибернетики. Методы и алгоритмы анализа данных для получения знаний и обучения.
презентация [10,9 K], добавлен 03.01.2014Современные разработки в области искусственного интеллекта: составление расписаний, принципы автономного планирования и управления, диагностика, понимание естественного языка, ведение игр, автономное управление, робототехника. Направления исследований.
реферат [24,0 K], добавлен 11.03.2014Исторический обзор развития работ в области искусственного интеллекта. Создание алгоритмического и программного обеспечения вычислительных машин, позволяющего решать интеллектуальные задачи не хуже человека. От логических игр до медицинской диагностики.
реферат [29,1 K], добавлен 26.10.2009История развития искусственного интеллекта в странах дальнего зарубежья, в России и в Республике Казахстан. Разработка проекта эффективного внедрения и адаптации искусственного интеллекта в человеческом социуме. Интеграция искусственного в естественное.
научная работа [255,5 K], добавлен 23.12.2014