Генетические алгоритмы являются одним из современных и быстро развивающихся направлений в искусственном интеллекте. С их помощью могут быть найдены решения многих задач в различных областях. Примерами таких задач являются: задачи синтеза расписаний, задачи планирования работ и распределения ресурсов, задачи маршрутизации транспортных средств, синтез топологии сетей различного назначения, построение искусственных нейронных сетей, деревьев принятия решений, автоматическое построение программ, проектирование мультиагентных систем, конечных автоматов и клеточных автоматов. К сожалению, в нашей стране этой области уделяется мало внимания. Одна из задач работы - хотя бы частично восполнить этот пробел.
Генетическое программирование - разновидность генетического алгоритма, в которой вместо низкоуровневого представления объектов (битовые строки) используется высокоуровневое представление: деревья разбора программ, диаграммы переходов конечных автоматов, и т.д. С помощью генетического программирования наиболее эффективно решаются задачи автоматического построения программ, конечных автоматов, клеточных автоматов.
Автоматное программирование - парадигма программирования, при использовании которой программу предлагается строить в виде совокупности поставщиков событий, объектов управления и системы управляющих взаимодействующих конечных автоматов. Поставщик событий характеризуется множеством событий, которые он может генерировать. Объект управления характеризуется множеством вычислительных состояний, а также двумя наборами функций: множеством предикатов, отображающих вычислительное состояние в логическое значение (истина или ложь), и множеством действий, позволяющих изменять вычислительное состояние. Управляющий автомат определяется конечным множеством управляющих состояний, функцией переходов и функцией действий.
Управляющие конечные автоматы часто характеризуются сложным
поведением, как например, в задачах об «Умном муравье» и «Летающие тарелки»,
рассматриваемых в настоящей работе. В таком случае их проектирование
представляет собой весьма трудоемкую задачу. Эта задача становится еще более
сложной в случае проектирования системы взаимодействующих автоматов или в
случае наличия в системе нескольких взаимодействующих агентов, каждый из
которых управляется отдельным автоматом. Возникает естественное желание -
автоматизировать процесс проектирования автоматов, поручив основную работу
компьютеру.
Необходимо построить приложение, позволяющее находить
интеграл для функции y =
(x).
Данное приложение в качестве входных данных должно
обрабатывать следующего формата, первая строка файла содержит целое число N (1
N≤100).
Следующие N строк содержат пары вещественных чисел вида: xi, yi.
Эти пары разделяет пробел, каждая пара начинается с новой
строки. Эти пары упорядочены по х, и расстояние по х между двумя парами
является фиксированным. Здесь необходимо найти оптимальное
представление для интеграла функции.
{+,-,*,/, sin, cos}
алгоритм приложение интеллект интеграл
BitTableProblem.java
package main;ec. EvolutionState;ec. Individual;ec.gp.GPIndividual;ec.gp.GPProblem;ec.gp.koza. KozaFitness;ec.simple. SimpleProblemForm;java.io. FileInputStream;java.io. FileNotFoundException;java.util. Scanner;class DoubleTableProblem extends GPProblem implements SimpleProblemForm {
n, m;[][] matr;double [] arr = new double[5];
double get (int pos) {(pos >n) {0.0d;
}arr [pos-1];
}void readfile() throws FileNotFoundException {sc= new Scanner (new FileInputStream («input.txt»));
=sc.nextInt();=sc.nextInt();
=new double [m] [n+1];(int i=0; i<m; i++)(int j=0; j<=n; j++){[i] [j]=sc.nextDouble();
} catch (RuntimeException re) {.out.println («» + i +» " + j);re;
}
}
@Overridevoid evaluate (EvolutionState es, Individual indvdl, int subpop, int threadnum) {(indvdl.evaluated) {;
}hits = 0;data = (DoubleData) input;
{();
} catch (FileNotFoundException ex) {new RuntimeException(ex);
}
pogr=0;
(int i =0; i<matr.length; i++) {(i);estimated = matr[i] [n];
((GPIndividual) indvdl).trees[0].child.eval (es, threadnum, data, stack, (GPIndividual) indvdl, this);delta = Math.abs (estimated-data.value);+= delta;(delta <= 0.001) {++;
}
}
KozaFitness fitness = (KozaFitness) indvdl.fitness;.setStandardizedFitness (es, pogr);.evaluated = true;.hits = hits;
}void parse (int value) {(int i=0; i<=n; i++)[i]=matr[value] [i];
}
}
DoubleData.java
package main;
ec.gp.GPData;
class DoubleData extends GPData {double value;
@Overridevoid copyTo (GPData data) {
((DoubleData) data).value = value;
}
}
Chact.java
package main;ec. EvolutionState;ec. Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
class Chast extends GPNode {
@OverrideString toString() {«/»;
}
@Overrideint expectedChildren() {2;
}
@Overridevoid eval (EvolutionState es, int i, GPData input, ADFStack adfs, GPIndividual gpi, Problem prblm) {data = (DoubleData) input;[0].eval (es, i, input, adfs, gpi, prblm);
result = data.value;
[1].eval (es, i, input, adfs, gpi, prblm);/=data.value;.value = result;
}
}
Sin.java
package main;
ec. EvolutionState;ec. Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
class Sin extends GPNode {
@OverrideString toString() {«sin»;
}
@Overrideint expectedChildren() {1;
}
@Overridevoid eval (EvolutionState es, int i,
GPData input, ADFStack adfs, GPIndividual gpi, Problem prblm) {data =
(DoubleData) input;[0].eval (es, i, input, adfs, gpi, prblm);result =
data.value;.value =Math.sin(result);
}
}
Cos.java
package main;
ec. EvolutionState;ec. Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
class Cos extends GPNode {
}
@Overrideint expectedChildren() {1;
}
@Overridevoid eval (EvolutionState es, int i, GPData input, ADFStack adfs, GPIndividual gpi, Problem prblm) {data = (DoubleData) input;[0].eval (es, i, input, adfs, gpi, prblm);
result = data.value;.value =Math.cos(result);
}
}
Proiz.java
main;
ec. EvolutionState;ec. Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
class Proiz extends GPNode {
@OverrideString toString() {«*»;
}
@Overrideint expectedChildren() {2;
}
@Overridevoid eval (EvolutionState es, int i, GPData input, ADFStack adfs, GPIndividual gpi, Problem prblm) {data = (DoubleData) input;[0].eval (es, i, input, adfs, gpi, prblm);result = data.value;
[1].eval (es, i, input, adfs, gpi, prblm);*=data.value;.value = result;
}
}
Raz.java
package main;
ec. EvolutionState;ec. Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
class Raz extends GPNode {
@OverrideString toString() {«-»;
}
@Overrideint expectedChildren() {2;
}
@Overridevoid eval (EvolutionState es, int i,
GPData input, ADFStack adfs, GPIndividual gpi, Problem prblm) {data =
(DoubleData) input;[0].eval (es, i, input, adfs, gpi, prblm);result =
data.value;[1].eval (es, i, input, adfs, gpi, prblm);=data.value;.value =
result;
}
}
Summ.java
package main;
ec. EvolutionState;ec.
Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
public class Summ extends GPNode {
@OverrideString toString() {«+»;
}
@Overrideint expectedChildren() {2;
}
@Overridevoid eval (EvolutionState es, int i, GPData input, ADFStack adfs, GPIndividual gpi, Problem prblm) {data = (DoubleData) input;[0].eval (es, i, input, adfs, gpi, prblm);result = data.value;
[1].eval (es, i, input, adfs, gpi, prblm);+=data.value;.value = result;
}
}
X.java
package main;ec. EvolutionState;ec. Problem;ec.gp.ADFStack;ec.gp.GPData;ec.gp.GPIndividual;ec.gp.GPNode;
class X extends GPNode {
@OverrideString toString() {«x»;
}
@Overrideint expectedChildren() {return 0;}
@Overridevoid eval (EvolutionState es, int i, GPData gpdata, ADFStack adfs, GPIndividual gpi, Problem prblm) {data = (DoubleData) gpdata;table = (DoubleTableProblem) prblm;.value = table.get(1);
}
}
Класс, генератор файла с парами значений (Myfunction.java)
package main;
java.io. File;java.io.IOException;java.io. PrintWriter;class MyFunction {F (double x) {otv;(x==1) {= 0;
} else {= Math.sin(x)+(Math.pow (x, 2)/(1-x));
}otv;
}
void printToFile (int n) throws IOException {matrFx[][] = new double[n] [2];file = new File («input.txt»);
(! file.exists()) {.createNewFile();
}
(PrintWriter out = new PrintWriter (file.getAbsoluteFile())) {.println («1 «+n);.println («0 0,0»);sum1 = 0;sum2 = 0;(int i=1; i<n; i++) {(i % 2==0) {+= F (matrFx[i] [1]);
}(i % 2==1) {+= F (matrFx[i] [1]);
}[i] [1]=(0.33333333333334)*(F(0)+F(n)+2*sum2+4*sum1);itfx = «»;in = String.valueOf (matrFx[i] [1]);[] ins = in.toCharArray();
(int j=0; j<ins.length; j++) {(ins[j] == '.') {[j]=', ';
}+= ins[j];
}.println (i+» «+itfx);
}
}
}
/**
* @throws java.io.IOException
*/static void main (String[] args) throws IOException {.out.println («Генерируем файл»);abc = new MyFunction1 ();.printToFile(100);
}
}
В ходе выполнения работы был реализован пример генетического
программирования согласно индивидуальному варианту
1. Алексеев В.М., Тихомиров В.М., Фомин С.В. Оптимальное управление. - М.: Наука, УДК 519.6, - 223 c., 1979, 406 с.
2. Колесников А.А. Аналитическое конструирование нелинейных оптимальных систем. Таганрог: Изд-во ТРТУ, 1984, 72 с.
. Рафиков Г.Ш. Цифровые системы управления. Конспект лекций. - Донецк, 1999, 102 с.
4. Tsinias J. Sufficient Lyapunov-like conditions for stabilization Mat. Contr. Signals Syst. 1989. Vol. 2. #12. Pр 343 - 357.
. Егоров А.И. Оптимальное управление тепловыми и диффузионными процессами. М.: Наука, 1978, 468 с.