Генетическое программирование - Контрольная работа

бесплатно 0
4.5 57
Генетические алгоритмы как одно из современных и быстро развивающихся направлений в искусственном интеллекте. Построение приложения, позволяющего находить интеграл для заданной функции. Описание и основные принципы построения промежуточных узлов.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Эта задача становится еще более сложной в случае проектирования системы взаимодействующих автоматов или в случае наличия в системе нескольких взаимодействующих агентов, каждый из которых управляется отдельным автоматом. 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);

} double pogr=0;

for (int i =0; i<matr.length; i ) { parse(i);

double estimated = matr[i] [n];

((GPINDIVIDUAL) indvdl).trees[0].child.eval (es, threadnum, data, stack, (GPINDIVIDUAL) indvdl, this);

double delta = Math.abs (estimated-data.value);

pogr = delta;

if (delta <= 0.001) { hits ;

}

}

KOZAFITNESS fitness = (KOZAFITNESS) indvdl.fitness;

fitness.SETSTANDARDIZEDFITNESS (es, pogr);

indvdl.evaluated = true;

fitness.hits = hits;

} private void parse (int value) { for (int i=0; i<=n; i ) arr[i]=matr[value] [i];

}

}

DOUBLEDATA.java package main;

import ec.gp.GPDATA;

public class DOUBLEDATA extends GPDATA { public double value;

@Override public void COPYTO (GPDATA data) {

((DOUBLEDATA) data).value = value;

}

}

Chact.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class Chast extends GPNODE {

@Override public String TOSTRING() { return «/»;

}

@Override public int EXPECTEDCHILDREN() { return 2;

}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA input, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) input;

children[0].eval (es, i, input, adfs, gpi, prblm);

double result = data.value;

children[1].eval (es, i, input, adfs, gpi, prblm);

result/=data.value;

data.value = result;

}

}

Sin.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class Sin extends GPNODE {

@Override public String TOSTRING() { return «sin»;

}

@Override public int EXPECTEDCHILDREN() { return 1;

}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA input, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) input;

children[0].eval (es, i, input, adfs, gpi, prblm);

double result = data.value;

data.value =Math.sin(result);

}

}

Cos.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class Cos extends GPNODE {

@Override public String TOSTRING() { return «cos»;

}

@Override public int EXPECTEDCHILDREN() { return 1;

}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA input, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) input;

children[0].eval (es, i, input, adfs, gpi, prblm);

double result = data.value;

data.value =Math.cos(result);

}

}

Proiz.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class Proiz extends GPNODE {

@Override public String TOSTRING() { return «*»;

}

@Override public int EXPECTEDCHILDREN() { return 2;

}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA input, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) input;

children[0].eval (es, i, input, adfs, gpi, prblm);

double result = data.value;

children[1].eval (es, i, input, adfs, gpi, prblm);

result*=data.value;

data.value = result;

}

}

Raz.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class Raz extends GPNODE {

@Override public String TOSTRING() { return «-»;

}

@Override public int EXPECTEDCHILDREN() { return 2;

}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA input, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) input;

children[0].eval (es, i, input, adfs, gpi, prblm);

double result = data.value;

children[1].eval (es, i, input, adfs, gpi, prblm);

result-=data.value;

data.value = result;

}

}

Summ.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class Summ extends GPNODE {

@Override public String TOSTRING() { return « »;

}

@Override public int EXPECTEDCHILDREN() { return 2;

}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA input, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) input;

children[0].eval (es, i, input, adfs, gpi, prblm);

double result = data.value;

children[1].eval (es, i, input, adfs, gpi, prblm);

result =data.value;

data.value = result;

}

}

X.java package main;

import ec. EVOLUTIONSTATE;

import ec. Problem;

import ec.gp.ADFSTACK;

import ec.gp.GPDATA;

import ec.gp.GPINDIVIDUAL;

import ec.gp.GPNODE;

public class X extends GPNODE {

@Override public String TOSTRING() { return «x»;

}

@Override public int EXPECTEDCHILDREN() {return 0;}

@Override public void eval (EVOLUTIONSTATE es, int i, GPDATA gpdata, ADFSTACK adfs, GPINDIVIDUAL gpi, Problem prblm) {

DOUBLEDATA data = (DOUBLEDATA) gpdata;

DOUBLETABLEPROBLEM table = (DOUBLETABLEPROBLEM) prblm;

data.value = table.get(1);

}

}

Класс, генератор файла с парами значений (Myfunction.java) package main;

import java.io. File;

import java.io.IOEXCEPTION;

import java.io. PRINTWRITER;

public class MYFUNCTION { double F (double x) { double otv;

if (x==1) { otv = 0;

} else { otv = Math.sin(x) (Math.pow (x, 2)/(1-x));

} return otv;

} public void PRINTTOFILE (int n) throws IOEXCEPTION { double MATRFX[][] = new double[n] [2];

File file = new File («input.txt»);

if (! file.exists()) { file.CREATENEWFILE();

} try (PRINTWRITER out = new PRINTWRITER (file.GETABSOLUTEFILE())) { out.println («1 « n);

out.println («0 0,0»);

double sum1 = 0;

double sum2 = 0;

for (int i=1; i<n; i ) { if (i % 2==0) { sum2 = F (MATRFX[i] [1]);

} if (i % 2==1) { sum1 = F (MATRFX[i] [1]);

}

MATRFX[i] [1]=(0.33333333333334)*(F(0) F(n) 2*sum2 4*sum1);

String itfx = «»;

String in = String.VALUEOF (MATRFX[i] [1]);

char[] ins = in.TOCHARARRAY();

for (int j=0; j<ins.length; j ) { if (ins[j] == ".") { ins[j]=", ";

} itfx = ins[j];

} out.println (i » « itfx);

}

}

}

/**

* @param args the command line arguments

* @throws java.io.IOEXCEPTION

*/ public static void main (String[] args) throws IOEXCEPTION {

System.out.println («Генерируем файл»);

MYFUNCTION1 abc = new MYFUNCTION1 ();

abc.PRINTTOFILE(100);

}

}

Вывод
В ходе выполнения работы был реализован пример генетического программирования согласно индивидуальному варианту

Список литературы
1. Алексеев В.М., Тихомиров В.М., Фомин С.В. Оптимальное управление. - М.: Наука, УДК 519.6, - 223 c., 1979, 406 с.

2. Колесников А.А. Аналитическое конструирование нелинейных оптимальных систем. Таганрог: Изд-во ТРТУ, 1984, 72 с.

3. Рафиков Г.Ш. Цифровые системы управления. Конспект лекций. - Донецк, 1999, 102 с.

4. Tsinias J. Sufficient Lyapunov-like conditions for stabilization Mat. Contr. Signals Syst. 1989. Vol. 2. #12. Pp 343 - 357.

5. Егоров А.И. Оптимальное управление тепловыми и диффузионными процессами. М.: Наука, 1978, 468 с.

Размещено на

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?