Генетические алгоритмы как одно из современных и быстро развивающихся направлений в искусственном интеллекте. Построение приложения, позволяющего находить интеграл для заданной функции. Описание и основные принципы построения промежуточных узлов.
Аннотация к работе
Эта задача становится еще более сложной в случае проектирования системы взаимодействующих автоматов или в случае наличия в системе нескольких взаимодействующих агентов, каждый из которых управляется отдельным автоматом. import ec. double delta = Math.abs (estimated-data.
Введение
Генетические алгоритмы являются одним из современных и быстро развивающихся направлений в искусственном интеллекте. С их помощью могут быть найдены решения многих задач в различных областях. Примерами таких задач являются: задачи синтеза расписаний, задачи планирования работ и распределения ресурсов, задачи маршрутизации транспортных средств, синтез топологии сетей различного назначения, построение искусственных нейронных сетей, деревьев принятия решений, автоматическое построение программ, проектирование мультиагентных систем, конечных автоматов и клеточных автоматов. К сожалению, в нашей стране этой области уделяется мало внимания. Одна из задач работы - хотя бы частично восполнить этот пробел.
Генетическое программирование - разновидность генетического алгоритма, в которой вместо низкоуровневого представления объектов (битовые строки) используется высокоуровневое представление: деревья разбора программ, диаграммы переходов конечных автоматов, и т.д. С помощью генетического программирования наиболее эффективно решаются задачи автоматического построения программ, конечных автоматов, клеточных автоматов.
Автоматное программирование - парадигма программирования, при использовании которой программу предлагается строить в виде совокупности поставщиков событий, объектов управления и системы управляющих взаимодействующих конечных автоматов. Поставщик событий характеризуется множеством событий, которые он может генерировать. Объект управления характеризуется множеством вычислительных состояний, а также двумя наборами функций: множеством предикатов, отображающих вычислительное состояние в логическое значение (истина или ложь), и множеством действий, позволяющих изменять вычислительное состояние. Управляющий автомат определяется конечным множеством управляющих состояний, функцией переходов и функцией действий.
Управляющие конечные автоматы часто характеризуются сложным поведением, как например, в задачах об «Умном муравье» и «Летающие тарелки», рассматриваемых в настоящей работе. В таком случае их проектирование представляет собой весьма трудоемкую задачу. Эта задача становится еще более сложной в случае проектирования системы взаимодействующих автоматов или в случае наличия в системе нескольких взаимодействующих агентов, каждый из которых управляется отдельным автоматом. Возникает естественное желание - автоматизировать процесс проектирования автоматов, поручив основную работу компьютеру.
1. Анализ технического задания
Необходимо построить приложение, позволяющее находить интеграл для функции y = (x).
Данное приложение в качестве входных данных должно обрабатывать следующего формата, первая строка файла содержит целое число N (1 N?100).
Следующие N строк содержат пары вещественных чисел вида: xi, yi.
Эти пары разделяет пробел, каждая пара начинается с новой строки. Эти пары упорядочены по х, и расстояние по х между двумя парами является фиксированным. Здесь необходимо найти оптимальное представление для интеграла функции.
{ ,-,*,/, sin, cos}
2. Описание промежуточных узлов алгоритм приложение интеллект интеграл
BITTABLEPROBLEM.java package main;
import ec. EVOLUTIONSTATE;
import ec. Individual;
import ec.gp.GPINDIVIDUAL;
import ec.gp.GPPROBLEM;
import ec.gp.koza. KOZAFITNESS;
import ec.simple. SIMPLEPROBLEMFORM;
import java.io. FILEINPUTSTREAM;
import java.io. FILENOTFOUNDEXCEPTION;
import java.util. Scanner;
public class DOUBLETABLEPROBLEM extends GPPROBLEM implements SIMPLEPROBLEMFORM { int n, m;
double[][] matr;
private double [] arr = new double[5];
public double get (int pos) { if (pos >n) { return 0.0d;
} return arr [pos-1];
} public void readfile() throws FILENOTFOUNDEXCEPTION {
Scanner sc= new Scanner (new FILEINPUTSTREAM («input.txt»));
n=sc.NEXTINT();
m=sc.NEXTINT();
matr=new double [m] [n 1];
for (int i=0; i<m; i ) for (int j=0; j<=n; j ) try { matr[i] [j]=sc.NEXTDOUBLE();
} catch (RUNTIMEEXCEPTION re) {
System.out.println («» i » " j);
throw re;
}
}
@Override public void evaluate (EVOLUTIONSTATE es, Individual indvdl, int subpop, int threadnum) { if (indvdl.evaluated) { return;
} int hits = 0;
DOUBLEDATA data = (DOUBLEDATA) input;
try { readfile();
} catch (FILENOTFOUNDEXCEPTION ex) { throw new RUNTIMEEXCEPTION(ex);