Category Archives: Evolucijski Algoritmi

Bihać Developers MeetUp počeo s radom


MeetUp društvena mreža

Prije 15 godina osnivači http://meetup.com društvene mreže imali su na umu nekoliko interesantnih razmišljanja koja su pobudila veliko interesovanje u svijetu. Osnovali su društvenu mrežu MeetUp, koja spaja ljude iz lokalne zajednice sličnih interesa. Naime, osnovna misija MeetUp društvene mreže jeste organizovanje lokalnih grupa i komunikacija kroz Meetup web site radi organiziranja sastanaka, razmjene iskustava, znanja iz određene oblasti i sl. Misija MeetUp društvene mreže predstavlja osnovni postulat svakog demokratskog društva:

MeetUp misija podrazumijeva revitalizaciju lokalne zajednice, pomoć i podrška ljudima cijelog svijeta za samo-organizovanje. MeetUp misija smatra da ljudi mogu mijenjati svoj lični svijet, ili cijeli svijet svojim samo-organiziranjem, koje postaje dovoljno snažno da ima snage da mijenja stvari oko nas. Vođena na ovoj ideji, na društvenoj mreži MeetUp organizovani su milioni ljudi iz raznih područja, društvenih i privrednih oblasti u pomoviranju znanja, u edukaciji, u promoviranju određenih tehnoloških rješenja i sl.

Koliko je ideja zapravo zdrava i snažna pokazuju brojke:

  • svakog mjeseca ovu društvenu mrežu posjeti približno 10 miliona ljudi,
  • broji 9.5 miliona korisnika
  • mjesečno se organizira 280.000 sastanaka
  • aktivnih lokalnih grupa 92.000
  • različitih meetup tema 90.000
  • lokalne grupe iz 45.000 gradova.

MeetUp spaja ljude sa posebnim interesima, koji mogu biti poslovni, edukacijski, socijalni, i bilo koji drugi interesi. MeetUp može okupljati Facebook prijatelje, ali isto tako i prijatelje koji nisu povezani na drugim društvenim mrežama. MeetUp je poseban još i u tome što on predstavlja jedinstvenu zajednicu koja spaja ljude kroz teme i probleme koje ljudi žele da nametnu i diskutuju licem u lice sa članovima. To je jedina društvena zajednica koja fizički spaja ljude.

Šta je Bihać Developers MeetUp grupa

Na ovom tragu grupa nekoliko entuzijasta, kompjuterskih freakova, zaljubljenika u softvare development, iz različitih platformi odlučila je da pokrene Bihać Developers Meetup grupu, čiji je osnovni zadatak razmjena iskustava i promocija razvoja softvera. Ovi ljudi pokušavaju da ljubav prema programiranju pokušaju prenijeti i na druge ljude jer smatraju da je to jedna blagodat koja čovjeka može učiniti prvenstveno sretnim, može mu obezbijediti poslovnu karijeru ili čovjerku biti lijep i interesantan hobi. Poziv “software developer” ili kako ga neki još uvijek zovu “programer” jedan od rijetkih poziva koji se započinje prvo iz znatiželje i ljubavi prema kompjuterima i programiranju, zatim rješavanju matematičkih i sličnih problema, a poslije se pravi karijera. Ono najvažnije, što je u bezbroj primjera i potvrđeno, je da nije nužno da budeš dobar student ili da studiraš kompjutersku nauku da bi bio dobar programer.

Neke od tema o kojima će se pričati na Meetup sastancima su:

  • razvoja softvera na različitim platformama desktop/web/cloud/mobile i različitim OS-ovima,
  • baze podataka, i ORM Framewors
  • cloud computing,
  • umjetna inteligencija, algoritmi mašinskog učenja
  • i druge srodne teme.

Prisustvo na sastancima je slobodno i potpuno besplatno, a svi oni koji žele da saznaju nešto o ovim temama o kojima želimo pričati su dobro došli. MeetUpi će se organizirati na Tehničkom fakultetu u Bihaću, uz podršku Univerziteta i drugih pravnih subjekata iz Bihaća i Unsko-sanskog kantona.

Kako postati član Bihać Developers MeetUp grupe

Bihać Developers prvenstveno cilja na mlade ljude koji tek žele da saznaju nešto oko razvoja softvera – programirnaja, ali i sve populacije od 7 do 77 godina. Prvenstveno se računa na:

  • studente tehničkih usmjerenja, kao i druge studente. ( Op. Neki moji prijatelji koji danas žive od razvoja softvera su završili filozoski odnosno pravni fakultet :))
  • srednjoškolce koji imaju interesa i smisla za programirnaje
  • mlade ljudi koji žele saznati o ovoj branši
  • zaljubljenike, freakove, geekove i ostale manjine,
  • i sve druge

Da bi postao član Bihać Developers MeetUp grupe poterebno je:

  1. Otvoriti račun sa svojim imena na http://meetup.com
  2. Postati član grupe tako što ćete se pridružiti Bihac Developers Meetup  grupi na web stranici: http://meetup.com/bihacdev
  3. sad kada ste postali član, smo je potrebno pratiti objave i najave predavanja i sastanaka te ukoliko imate vremena doći na Tehnički fakultet i prisustvovati sastanku.

Ko organizira sastanke Bihać Developers MeetUp grupe

Bihać Developers Meetup je nastavnak aktivnosti koje je do sada vodila Bihać .NET user grupa, a intencija je da se ova praksa proširi sa drugim temama i platformama. Ideja je podržana kako od Univerziteta u Bihaću i Tehničkog fakulteta, tako i privatnog sektora i softverske kompanije IDK studio i drugih pojedinaca koje možete pogledati na meetup stranici.

Ko sponzorira sastanke Bihać Developers MeetUp

Kako su sastanci i prisustvovanje potpuno besplatni, a Tehnički fakultet i Univerzitet u Bihaću logistički suport i sponzor, to je sada dovoljno da se predavanja i sastanci održavaju. Naravno, sponzori i zainteresirane kompanije koje žele podržati ovakav vid razmjene znanja i promovisanja visokih tehnologija dobro su došle i mogu nam se javiti da sponzorstvo.

Interesuje me kad se održava predavanje

Prvi sastanak Bihać Developers zakazan je 19. (četvrtak) oktobra 2017. godine u 17:00 na Tehnikom fakultetu. Za prvi put smo se odlučili da pričamo općenito o ovoj temi te da prisutnim ispričamo neke od karijara naših ljudi u gradu Bihaću kako su postali Softver Developeri. Već sljedeći sastanak koji planiramo za novembar biće tematski a predavanje pokriti jednu vrlo zanimljivu Web tehnologiju. Ali otom potom..

 

 

Advertisements

GPdotNET v4.0 has been released


After almost two years of implementation, I am proud to announce the forth version of the Open source project called GPdotNET v4.0. The latest version completely implements Genetic Programming and Artificial Neural Network for supervised learning tasks in three kind of problems: regression, binary and multiclass classification. Beside supervised learning tasks, with GPdotNET you can solve several Linear Programming problems: Traveling Salesman, Assignment and Transportation problems. The source code and binaries can be download from Github page: https://github.com/bhrnjica/gpdotnet/releases/tag/v4.0

Figure 1. Main Window in GPdotNET v4.0

Introduction

In 2006 the GPdotNET started as post-graduate semester project, where I was trying to implement simple C# program based on genetic programming. After successfully implemented console application, started to implement .NET Windows application to be easy to use for anyone who wants to build mathematical model from the data based on genetic programming method. In November 2009 GPdotNET became an open source project, by providing the source code and installer. Since then I have received hundreds of emails, feedbacks, questions and comments. The project was hosted on http://gpdotnet.codeplex.com. In 2016 I decided to move the project to GitHub for better collaboration and compatibility, and can be found at http://github.com/bhrnjica/gpdotnet. However, for backward compatibility, the old hosting site will be live as long as the codeplex.com would be live. Since the beginning of the development, my intention was that the GPdotNET would be cross-OS application which can be run on Windows, Linux and Mac. Since version 2, GPdotNET can be compiled against .NET and Mono, and can be run on any OS which has Mono Framework installed. Beside this fact, vast majority of users are using GPdotNET on Windows OS.

GPdotNET is primarily used on Academia by helping engineers and researchers in modelling and prediction various problems, from the air pollution, water treatment, rainfall prediction, to the various modelling of machining processes, electrical engineering, vibration, automotive industry etc. GPdotNET is used in more than ten doctoral dissertations (known to me) and master thesis, nearly hundreds paper used GPdotNET in some kind of calculation.

Modeling with GPdotNET (New in GPdotNET v4.0)

Working with GPdotNET requires the data. By providing the learning algorithms GPdotNET uses a data of the research or experimental measures to learn about the problem. The results of learning algorithms are analytical models which can describe or predict the state of the problem, or can recognize the pattern. GPdotNET is very easy to use, even if you have no deep knowledge of GA, GP or ANN. Appling those methods in finding solutions can be achieved very quickly. The project can be used in modeling any kind of engineering process, which can be described with discrete data, as well as in education during teaching students about evolutionary methods, mainly GP and GA, as well as Artificial Neural Networks.

Working in GPdotNET follows the same procedures regardless of the problem type. That means you have the same set of steps when modelling with Genetic Programming or Neural Networks. In fact, GPdotNET contains the same set of input dialogs when you try to solve Traveling Salesman Problem with Genetic Algorithm or if you try to solve handwriting recognition by using Backpropagation Neural Networks. All learning algorithms within GPdotNET share the same UI.

The picture below shows the flowchart of the modelling in GPdotNET. The five steps are depicted in the graphical forms surrounded with Start and Stop item.

Figure 2. Modelling layout in GPdotNET 4.0

After GPdotNET is started main window is show, and the modelling process can be started.

Choosing the Solver Type

The first step is choosing the type of the solver. Which solver you will use it depends on your intention what you want to do. Choosing solver type begins when you press “New” button, the “GPdotNET Model creation wizard” appear. Soler types are grouped in two categories. The first group (on the left side) contains models implemented prior to v4.0 version. It contains solvers which apply GP in modelling regression problems, and GP in optimization of the GP models. In addition, you can perform optimization of any analytically defined function by using “Optimization of the Analytic function”. Also, there are three linear programming problems which GPdotNET can solve using GA.

On the right side, there are two kind of solvers: GP or ANN, which are not limited to solve only regression. Both GP or ANN can build model for regression, binary or multi-class problems. Which type of problem GPdotNET will use, depends of the type of the output column data (label column).

Figure 3. Available model types

Loading Experimental Data (new in GPdotNET 4.0)

GPdotNET uses powerful tool for importing your experimental data regardless of the type. You can import numerical, binary or classification data by using Importing Data Wizard. With GPdotNET importing tools you can import any kind of textual data, with any kind of separation character.

Figure 4. Importing dataset dialog

After the data is imported in forms of columns and rows, GPdotNET implemented set of very simple controls which can perform very powerful feature engineering. For each loaded column, you can set several types of metadata: column name, column type (input, output, ignore), normalization type (minmax, gauss), and missing value (min, max, avg). With those options, you can achieve most of the modelling scenarios. Before “Start Modelling” minimum conditions must be achieved.

  • At least one column must be of “input” parameter type.
  • At least one column must be of “output” parameter type.

Which type of problem (regression, binary or multi class) will be used depends of the type of the output column. The following cases are considered:

  1. in case of regression problems ouput column must be of numeric type.
  2. in case of binary classinfication output column must be of binary type.
  3. in case of multi class classinfication output column must be of categorical type.

Figure 5. Defining metadata for training data set

When the column should not be part of the feature list, it can be easily ignored when the Column Type is set to “ignore“, or Param type is set to “string“.

Figure 6. Changing column type to binary

Change value of metadata by double click on the current value, select new values from available popup list. When you done with Feature Engineering press “Start Modelling” button and the process of modelling can be start.

Note: After you press Start Modelling button you can still change values of metadta, but after every change of the metadata values, Start Modelling button must be pressed.

Setting Learning Parameters

Figure 7. Setting parameters Dialog

After data is loaded and prepared successfully, you have to set parameters for the selected method. GPdotNET provides various parameters for each method, so you can set parameters which can provides and generates best output model. Every parameter is self-explanatory.

Searching for the solution

GPdotNET provides visualization of the searching solution so you can visually monitor how GPdotNET finds better solution as the iteration number is increasing. Beside searching simulation, GPdotNET provides instant result representation (only GP models), so any time the user can see what is the best solution, and how currently best solution is good against validate or predicted set of data. (Result and Prediction tabs).

Figure 8. Searching simulation in GPdotNET

Saving and exporting the results:

GPdotNET provides several options you can choose while exporting your solution. You can export your solution in Excel or text file, as well as in Wolfram Mathematica or R programming languages (GP Models only). In case of ANN model the result can se exported only to Excel.


Figure 9. Searching simulation in GPdotNET

Besides parameters specific to learning algorithm, GPdotNET provides set of parameters which control the way of how iteration process should terminates as well as how iteration process should be processed by means of parallelization to use the multicore processors. During the problem searching GPdotNET records the history, so you can see when the best solution is found, how much time pass since the last iteration process start, or how much time is remaining to finish currently running iteration process.

Due to the fact that GP is the method which requires lot of processing time, GPdotNET provides parallelization, which speed up the process of searching. Enabling or disabling the parallelization processing is just a click of the button.

GPdotNET Start Page

In case you have no data or just want to test the application, GPdotNET providers 15 data samples for demo purposes. All samples are grouped in problems specific groups: Approximation and Regressions, Binary Classification, Multi-class classification, Time series modelling and Linear Programming.

Figure 10. Modelling layout in GPdotNET

By click on appropriate link sample can be opened to see current result and parameter values. You can easily change parameter, press Run button and search for another solution. This is very handy to introduce with GPdotNET. In any time, you can stop searching and export current model or save current state of the program.

Final note: The project is licensed under GNU Library General Public License (LGPL). For information about license and other kind of copyright e.g. using the application in commercial purpose please see http://github.com/bhrnjica/gpdotnet/blob/master/license.md.

In case you need to cite it in scientific paper or book please refer to  https://wordpress.com/post/bhrnjica.net/5995

GPdotNET v4.0 Beta 2 released


Download GPdotNET v4 beta2

The last few days I am preparing the new build for publishing of GPdotNET v4.0 which will include lot of new features. In the last post I have announced ANN modul and compleately new modul for preparing tha data for modelling. Here is a quick overview of the new features comming in this build:

  1. Since this build the GP modul is also integrated with the new way of data preparation. Now with the latest version of GPdotNET the user will have the same user  experience in modelling with GP and ANN.
  2. The big news for this build is ability for modelling classification problems (two-class as well ) with Genetic programming. Multy -classs GP solver will be released soon.
  3. Separation of the previous and new version. Both are included in the latest build.
  4. Disable protected operations.

 

As picture shows below you can choose models from prevous version on the left side. On the right side of the new model dialog, you can select modeling and prediction with ANN or GP.

GPdotNET v4.0 Beta 2

After you select the solver GPdotNET is ready to accept the data.

GPdotNET v4.0 Beta 2 02

From the previous blog post you can see more info about loading and handling data.  The same user experimence you can see regadles of the solver type (ANN or GP).

Beside this GP integration there are several bug fix which were reported from the users.

In GP solver the new feature has been added: Ability to disable protected operations. In the previuous version of GPdotNET protected operations (eg. /, log, ln, etc) are enabled in the model. Whenever operation was undefined for the current value. GPdotNET returned default value (0 or 1). So with protected operation the model is always defined. With protected operations we collect much good genetic material dufirng evolution. In case the option is disable any upprotected operation can discar the model. This option is available in new and previous GP solver.

GPdotNET v4.0 Beta 2 03

Features not implemented in this beta

1. Exporting GP/ANN model

2. Open/Save gpa file for new Solvers.

GPdotNET 4.0 first look: Classification with Neural Networks


After some time of implementation and testing, the new version of GPdotNET is out. Go to codeplex page and download it. This is huge step in development of this project, because it contains completely new module based on Artificial Neural Network and other optimization methods e.g. Particle Swarm Optimization. gpdotnetv4_firstlook1

Almost all aspects of the architecture are changed, or will be changed when this version would be released.

The new Experiment class will replace existing classes for handling experimental data in GA based models, which is not implemented yet. Also New start page will contain more pre-calculated examples.

For this beta here are the new features:

  1. New Start Page will be extended with new examples of Neural Nets : – binary classification, – multiclass classification and – regressions examples.
  2. Improved module for loading experimental data, which now supports nonnumeric data like categorical or binary data.
  3. Depending of the output column of loaded experimental data different learning algorithm is selected. For example if the column is of categorical type, GPdotNET selects Neural Net algorithm with Cross-Entropy and Particle Swarm optimization learning algorithm. If the output column is numerical, GPdotNET selects the Neural Nets with Backpropagation learning algorithm. Currently only two learning algorithms are implemented. More will be implemented in the next beta release.

Classification problem with GPdotNET

This topic will give quick tutorial how to model classification problem with GPdotNET by using Neural Nets. For this tutorial you need some experimental data which you can download from this location.

  • Open GPdotNET choose New Command
  • New Dialog pops up, check Artificial Neural Nets, and Press Ok Button.

gpdotnetv4_firstlook2

After Solver Type selection, GPdotNET Creates “Load Experiment” Page in which you can load experimental data, and define the percentage of data for testing the model. gpdotnetv4_firstlook3

  • Press Load Data button.
  • New Popup dialog appears.
  • Press File button select the file you previously downloaded.
  • Check Semicolon and First Row Header check buttons.

Note: When the data is analyzed correctly you should see vertical line “|” between columns. Otherwise data will not be loaded correctly.

  • When the experimental data is formatted correctly, press the “Import Data” button.

The next step is preparing columns for modeling. gpdotnetv4_firstlook4

For each columns we have to set:

  • a) proper type of the column (numeric, categorical or binary),
  • b) type of the parameter (input, output or ignore)
  • c) normalization method (MinMax,Gauss or Custom normalization of the column values ).

To change Column Type, double click on the cell which shows the column type, combo box appears with list of available types.

gpdotnetv4_firstlook5

  • To change Parameter Type, double click on the cell which shows the param type, combobox appears with list of available parameter types.
  • gpdotnetv4_firstlook6
  • To change Normalization Type, double click on the cell which shows MinMax value, combobox appears with list of available normalization types.

gpdotnetv4_firstlook7

Note: you can set only one Output column. Put Parameter Type to Ignore if you want to skip column from modelling.

Now we have experimental data, and we can start modelling process. Before that we need to choose how much data will be treated for testing. Enter 10% for testing the data and press Start Modelling button.

Now we have more Pages:

1. Settings page for setting the parameters of the Neural Nets

2. Run page for simulation of searching solution

3. Prediction page which you can see how solution is good against testing data.

Settings Page

gpdotnetv4_firstlook8

As you can see in Settings Page you can set various parameters for Neural Nets and Particle Swarm Optimization. Try to train the model with different parameters values. For this tutorial you can leave parameters as are.

Modeling Page

Modeling page contains two diagrams. The first diagram shows errors with respect of the iteration number which is very useful for monitoring the searching process. The second diagram which is below the previous shows current best solution (blue line) in comparison with the experimental data (red line). Also on the left side of the page, you can see several iteration number, error, and other information about searching process. gpdotnetv4_firstlook9

Prediction Page

Prediction page shows how current best model predict data. Predict page contains tabular and graphical representation of predicted data, which is compared with data for testing. gpdotnetv4_firstlook10

Features don’t work in this BETA

1. Exporting Neural Network model

2. Saving to gpa file Neural Network Models

GPdotNET v4.0- Introduction


This is the first post in series of posts that describe upcomming version of GPdotNET v4.0. Besides lot of improvements of the current version, the main part isimplementation of neural networks and set of other optimization methods of machine learning.

1. Modelling with GPdotNET v4.0

GPdotNET Logo

GPdotNET Logo

GPdotNET is C#, open source artificial intelligence tool for applying Genetic Algorithm and Artificial Neural Networks in modeling, prediction, optimization and pattern recognitions. With GPdotNET you can solve various engineering problems from classic regression and approximation to linear programming transportation and location problems and other machine learning based problems. By providing the learning algorithms GPdotNET uses a data of the research or experimental measures to learn about the problem. The results of learning algorithms are analytical models which can describe or predict the state of the problem, or can recognize the pattern. GPdotNET is very easy to use, even if you have no deep knowledge of GA, GP or ANN, you can apply those methods in finding solutions. The project can be used in modeling any kind of engineering process, which can be described with discrete data, as well as in education during teaching students about evolutionary methods, mainly GP and GA, as well as machine learning mainly Artificial Neural Networks.
The typical process of modelling with GPdotNET can be described in 5 steps.

  1. Choosing the type of the Solver: The first step is choosing the type of the solver. Which solver you will use depends on your intention what you want to do. For example if you want to make model for your experimental measurement you have several options which depend of your experimental data and the method you want to use. In GPdotNET you can use Genetic Programming or Neural Nets for modelling and prediction experimental data. But this is not strictly separate as may look on the flowchart below. That means that you can user Neural Networks for prediction, but training algorithm can be based on  Genetic Algorithm or Particle Swarm Optimization or Back Propagation algorithm.
  2. Loading your experimental data: GPdotNET uses powerful tool for importing your experimental data regardless of the type of data. You can import your numerical, binary or classification data. GPdotNET can automatically define classes, or format numerical data with floating or comma separated decimal values. More info can be find in Section 2.
  3. Setting Learning Parameters. After data is loaded and prepared successfully, you have to set parameters for the selected method. GPdotNET providers various parameters for each method, so you can set parameters which can provides and generates best output model.
  4. Searching for the solution: GPdotNET provides visualization of the searching solution so you can visually monitor how GPdotNET finds better solution as increasing the iteration number. If you provide data for testing calculated model, you can also see simulation of prediction.
  5. Saving and exporting the results: GPdotNET provides several options you can choose while exporting your solution. You can export your solution in Excel or text file, as well as in Wolfram Mathematica or R programming languages.

As would be seen, working in GPdotNET follows the same procedures regardless of the problem type. That means you have the same set of steps when modelling with Genetic Programming or Neural Networks. In fact GPdotNET contains the same set of input dialogs when you try to solve Traveling Salesman Problem with Genetic Algorithm or if you try to solve handwriting recognition by using Backpropagation Neural Networks. All learning algorithms within GPdotNET share the same UI.

The picture below shows the flowchart of the modelling in GPdotNET. The five steps described previously are depicted in the graphical forms surrounded with Start and Stop elements.

Modeling in GPdotNET v4.0

Modeling in GPdotNET v4.0

Besides parameters specific to learning algorithm, GPdotNET provides set of parameters which control the way of how iteration process should terminates as well as how iteration process should be processed by means of parallelization to use the multicore processors. During the problem searching GPdotNET records the history, so you can see when the best solution is found, how much time pass since last iteration process started, or how much time is remain to finish currently running iteration process.
Due to the fact that GP is the method which requires lot of processing time, GPdotNET provides parallelization, which speed up the process of searching. Enabling or disabling the parallelization processing is just a click of the button.

1.1 GPdotNET Open source project

From developer point of view GPdotNET is .NET (Mono) application written in C# programming language which can run both on Windows and Linux based OS, or any OS which supports Mono framework. Project started in 2006 within postgraduate study for modeling and optimization with evolutionary algorithms. As open source project, GPdotNET is first published on November 5 2009 on codeplex.com. The project is licensed under GNU Library General Public License (LGPL). For information about license and other kind of copyright please see http://gpdotnet.codeplex.com/license. The project is hosted at http://gpdotnet.codeplex.com. Main place for all news, documentation and code changes is my blog site at https://bhrnjica.wordpress.com/gpdotnet.

1.2 How to citate GPdotNET

GPdotNET is used from all around the world, in scientific papers, journals, books, for diploma works, master thesis or Dissertations. It is free to use GPdotNET with proper citation. So if you want to use the GPdotNET you need the right way to citate the tool.

Use this citation example in your paper, book etc.:

[1] B. I. Hrnjica, GPdotNET V4.0- artificial intelligence tool [Computer program], http://gpdotnet.codeplex.com, accessed {date}.

Or

[1] Bahrudin I. Hrnjica, GPdotNET V4.0 – artificial intelligence tool [Computer program], http://gpdotnet.codeplex.com, accessed {date}.

Alati za analizu rezultata eksperimentalnog istraživanja


Bilo da pišete neki naučni rad, magistarsku ili doktorsku tezu, u prilici ste da baratate sa rezultatima vašeg istraživanja, koji su većinom u diskretnom obliku. Diskretni oblik rezultata istraživanja prvenstveno je dat u tabelarnom obliku pri kojem postoji nekoliko ulaznih parametara  te jedna ili više izlaznih varijabli.
Pretpostavimo da ste vršili određeno mjerenje, npr. silu rezanja, a da ste pri tom varirali dijametar alata i posmak. U tom slučaju rezultat vašeg mjerenja može biti tabela slična prikazanoj:

RB          s[mm/o]          d[mm]          F[ N]
---------------------------------------------------
 1           0,25              8            318,8
 2           0,35              8            437
 3           0,25             14            450
 4           0,35             14            530,3
 5           0,3              11            445,6
 6           0,3              11            467
 7           0,3              11            475,5
 8           0,3              11            456,8
 9           0,3              11            469
10           0,38             11            480,8
11           0,23             11            399
12           0,3              16            588,2
13           0,3               7            320
----------------------------------------------------

Po meni najbolji alat za modeliranje podataka datih u diskretnom obliku jeste Wolframova Mathematica. Da bi dobili regresijske modele pomoću Mathematica potrebno je eksperimentalne podatke pripremiti, odnosno definisati varijablu eksperiment sa vrijednostima iz tabele.Od eksperimentalnih rezultata prikazanih tabelom ptrebno je izvršiti regresijsku analizu i definisati matematički model, odnosno funkcionalnu zavisnos dijametra, posmaka od sile bušenja.

Izvorni kod prikazan na narednom listingu predstavlja jedan od načina kako prikazati podatke preko varijable, a koja predstavlja listu eksperimentalnih podataka.

</p>

<pre>eksperiment={{0.25,8,318.8},{0.35,8,437},{0.25,14,450},{0.35,14,530.3},{0.3,11,445.6},{0.3,11,467},{0.3,11,475.5},{0.3,11,456.8},{0.3,11,469},{0.38,11,480.8},{0.23,11,399},{0.3,16,588.2},{0.3,7,320}}

Sada kada imamo varijablu, vrlo je jednostavno dobiti matematičke modele. Varijabla predstvalja 2D polje koje se sastoji of vrsta i kolona naše polazne tabele.

Na primjer da bi dobili regresijski model drugog stepena sa linearnom međuzavisnosti među članovima potrebno je izvršiti komandu:

rModel2=Fit[eksperiment,{1,x,x^2, y,y^2,x*y},{x,y}]

Gornjom komandom Mathematika će metodom najmanjih kvadrata odrediti kvadratni model. Kako se može vidjeti Fit komanda, kao jedan od argumenata, uzima i šemu modela. Šema modela predstavlja članove polinoma koji će se naći u matematičkom modelu. Nakon izvršavanja ove dvije komande Mathematica je vratila matematički model naglašen crvenim pravougaonikom:

mepslika1

Naravno Fit komanda uzima bilo koju kombinaciju faktora i bilo koji stepen polinoma, tako da se čitaocu ostavlja da sam istraži i ostale modele. Npr. vrlo je interesantno da se odredi regresijski model 3-ćeg stepena, sa linearnom i kvadratnom međuzavisnošću ulaznih parametara.

Još zgodnije izgleda kada se dobijeni regresijski model može prikazati grafički izvršavajući slijedeću komandu:

mepslika2

Vidjeli smo kako na jednostavan način mogu dobiti regresijski modeli od diskretnog skupa podataka koji može predstavljati vaše eksperimentalno istraživanje. Naravno sve ovo se može uraditi i u Microsoft Excelu samo sa malo više muke.

Modeliranje podataka metodom genetskog programiranja

Modelirati se mogu podaci i preko evolucijske metode genetsko programiranje preko koje se mogu dobiti vrlo kvalitetni modeli koji mogu biti dosta precizniji od regresijskih modela. Prednost evolucijskih modela (modela koji se dobiju nekom od evolucijkih metoda) jeste ta da oni ne zavise od stepena polinoma, niti od zavisnosti među ulaznim parametrima. Na ovaj način prirodnim putem se generiraju modeli, kao i međuzavisnost između ulaznih parametara. Jedan od alata koji koristi metodu genetsko programiranje za modeliranje rezultata eksperimenta je GPdotNET, koji na vrlo jednostavan i intuitivan način koristi metodu genetskog programirnaja pri izgradnji matematičkih modela. Više informacije o GPdotNET mozete pronaći na https://bhrnjica.net/GPdotNET.

Da bi rezultate eksperimenta prezentiane na gornjoj tabeli učitali u GPdotNET potrebno je formirati csv datoteku kojom ćemo definisati skup podataka za treniranje.

– Otvorite Notepad i kopirajte slijedeći tekst te sačuvajte datoteku pod naslovom SkupZaTreniranje.csv.

!s[mm/o]         d[mm]         F[ N]
!---------------------------------------------------
0.25;8;318.8
0.35;8;437
0.25;14;450
0.35;14;530.3
0.3;11;445.6
0.3;11;467
0.3;11;475.5
0.3;11;456.8
0.3;11;469
0.38;11;480.8
0.23;11;399
0.3;16;588.2
0.3;7;320

Primjetite da su kolone odvojene sa ‘;’ (tačka zarez), a kolone novim redom. Također važno je imati na umu da su decimalne cifre odvojene tačkom umjesto zarezom, te da ispred vrste koja predstavlja neki tekst, naziv kolone ili dr. mora biti stavljan zna !, odnosno da se označi kao linija koja se ne procesuira.

Kada imamo ovakvu datoteku sada možemo učitati podatke u GPdotNET.

1. Pokrenimo GPdotNET i odaberimo New komandu. Pojavljuje nam se dijalog za odabir vrste modela koju želimo odrediti. Ostavite početne vrijednosti i pritisnite dugme OK.

mepslika3

2. Sada iz Load Data taba pritisnemo dugme “Training Data” izaberemo datoteku koju smo prethodno formirali i pritisnemo dugme OK.

mepslika4

3. U trećem koraku podešavamo parametre GP. Parametre je potrebno podesiti kako je prikazano na donjoj slici.

mepslika6

4. Sada nam samo ostaje da pokrenemo simulaciju traženja rješenja klikom na komandu RUN.

5. Kada smo dobili model koji nam odgovara preko “Result” taba možemo vidjeti oblik dobijenog modela, a preko Export komandi mozemo vršiti daljnju analizu rezultata.

mepslika7

Vidjeli smo kako vrlo jednostavno i efektivno možemo modeliati naše rezultate eksperimentalnih istraživanja bez suvišnog gubljenja vremena i podešavanja. Također, vidjeli smo kako sa GPdotNET možemo dobijati vrlo precizne matematičke modele dobijene metodom genetsko progamirnaje.

C# Matrix Chromosome implementation in Genetic Algorithm


The next version of GPdotNET will be extended with 3 new solvers:

– Traveling Salesman Problem (TSP),
– Assignment problem (AP) and
– Transportation Problem (TP)

More or less the first two solvers are already presented in previous posts. Both TSP and AP can be implemented with vector based representation, which is already posted here. For transportation problem new chromosome representation have to be implemented. Before we go in to the implementation let give short introduction of Transportation problems.

Transportation problem is one of the simplest combinatorial problem. It searches the determination of a minimum cost transportation plan for a single commodity from a number of sources to a number of destinations. It requires the specification of the level of supply at each source, the amount of demand at each destination, and the transportation cost from each source to each destination. Solution is to find the amount to be shipped from each source to each destination in such a way that the total transportation cost have to be minimized.
Let’s assume we have n sources and k destinations. Let’s also assume that amount of supply at source i is SRC(i) and demand at destination j is DST(j). The unit transportation cost between source i and destination j is CST(i,j). Let x_{ij} is the amount transported from source i to destination j transportation problem can be formulated like the following:
Minimize:

min { \sum_{i=1}^{n}\sum_{j=1}^{m} c_{ij} x_{ij}}

{ \sum_{i=1}^{n} x_{ij}=a_i}, (i=1,...,n)

{ \sum_{j=1}^{m} x_{ij}=b_j, (j=1,...,m)}

{ x_{ij}>=0, (i=1,...,n), (j=1,...m)}

A typical transformation problem is shown in picture below. In this example we have 3 sources and 4 destination. The supply is shown on Supply column, and destination cost is shown on the last row. Total supply and demand is 45. The unit transportation cost is shown on central table.

transportProblem1

The optimal solution is shown in picture below. The total cost is 315.

transportProblem2

The most natural way to represent this kind of problem is 2 dimensional matrix, because our solution must be presented as picture show above in tabular data.

Theory behind matrix representation chromosome is beyond this blog post, so in the next section it will be shows only C# implementation with some description. If you want more information behind this implementation you can find it in the book: Genetics Algorithm + Data Structure = Evolution Programs which can be see at Google books at pages 187-191.

Implementation of main method: GenerateMatrix:

///
/// Initialize randomly matrix chromosome for transport problem based on book
/// Genetic Algorithm+Data Structure= Evolution programs
///
///r- number of rows (sources)
///c- number of columns (destination)
///src[] - source values
///dest[] - destination values
/// Cost matrix cost(i,j)
internal static int[][] GenerateMatrix(int r, int c, int[] src, int[] dest)
{
    //initi values
    int tot = r * c;
    var lst = new List(tot);

    //prepare values for generation
    int counter = 0;
    var vals = new int[r][];
    for (int i = 0; i < r; i++)
    {
        vals[i] = new int[c];
        for (int j = 0; j < c; j++)
        {
            lst.Add(counter);
            counter++;
        }
    }

    while (true)
    {
        //exit from while must be before list is empty
        if (lst.Count == 0)
            throw new Exception("null");

        int ind = Globals.radn.Next(lst.Count);
        int q = lst[ind];

        int i = (int)Math.Floor((double)(q) / (double)(c));
        int j = q % c;

        //if element is visited generate again random number
        if (vals[i][j] != 0)
            continue;

        lst.RemoveAt(ind);

        int val = Math.Min(src[i], dest[j]);
        vals[i][j] = val;
        src[i] = src[i] - val;
        dest[j] = dest[j] - val;

        bool canBreak = true;
        for (int k = 0; k < r; k++)
            if (src[k] != 0)
            {
                canBreak = false;
                break;
            }

        if (canBreak == false)
            continue;

        for (int k = 0; k < c; k++)
            if (dest[k] != 0)
            {
                canBreak = false;
                break;
            }
        //if all sources and destination are zero, generation is finished
        if (canBreak)
            return vals;
    }
}

This is main function for this type of chromosome because all other operations is based on this method.
The second implementation is Crossover.

///
// Crossover based on Book Genetic Algorithm +Data Structure = Evolution Programs.
public void Crossover(IChromosome parent2)
{

GAMChromosome ch2= parent2 as GAMChromosome;
if(ch2==null)
throw new Exception("ch2 cannot be null!");

int[] srcREM1 = new int[rows];
int[] destREM1 = new int[cols];
int[] srcREM2 = new int[rows];
int[] destREM2 = new int[cols];

for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
double m1 = value[i][j] + ch2.value[i][j];
double d = Math.Floor(m1 / 2.0);
int r = (((int)m1) % 2);

value[i][j] = (int)d;
ch2.value[i][j] = (int)d;
srcREM1[i] += r;
destREM1[j] += r;
srcREM2[i] += r;
destREM2[j] += r;
}
}
for (int i = 0; i < rows; i++)
{
srcREM1[i] /= 2;
srcREM2[i] /= 2;
}
for (int j = 0; j < cols; j++)
{
destREM1[j] /= 2;
destREM2[j] /= 2;
}
var mat1 = GenerateMatrix(rows, cols, srcREM1, destREM1);
var mat2 = GenerateMatrix(rows, cols, srcREM2, destREM2);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
value[i][j] += mat1[i][j];
ch2.value[i][j] += mat2[i][j];
}
}
return;
}

As we can see crossover method contain two calls for GenerateMatrix method which randomly initialize sub matrix chromosome.

Mutation operation also depends of  GenerateMatrix because it randomly choose location which needs to be recreated. The following code contains two Mutate methods where the second one calls GenerateMatrix for subMatrix random generation.

///  Mutation based on Book Genetic Algorithm +Data Structure = Evolution Programs.
public void Mutate()
{
    //choose random number of cols and rows
    int locRows = Globals.radn.Next(1,rows);
    int locCols = Globals.radn.Next(1,cols);
    //define array for holding random indexs
    var localRows = new int[locRows];
    var localCols = new int[locCols];

    //generate random source
    int counter = 0;
    while (true)
    {
        var num = Globals.radn.Next(rows);

        var found = false;
        for (var i = 0; i < localRows.Length; i++)
        {
            if (localRows[i] == num)
            {
                found = true;
                break;
            }
        }
        if (!found)
        {
            localRows[counter] = num;
            counter++;
        }
        if (counter  == localRows.Length)
            break;
    }
    //generate random destination
    counter = 0;
    while (true)
    {
        var num = Globals.radn.Next(cols);

        var found = false;
        for (var i = 0; i < localCols.Length; i++)
        {
            if (localCols[i] == num)
            {
                found = true;
                break;
            }
        }
        if (!found)
        {
            localCols[counter] = num;
            counter++;
        }
        if (counter == localCols.Length)
            break;
    }
    //perform mutation
    Mutate(locRows, locCols, localRows, localCols, this);

}

internal static int[][] Mutate(int r, int c, int[] rs, int[] cs, GAMChromosome ch)
{
    var source = new int[r];
    var destination = new int[c];
    //calculate Source for random submatrix
    for (int i = 0; i < rs.Length; i++)
        for (int j = 0; j < cs.Length; j++)
            source[i]+= ch.value[rs[i]][cs[j]];

    //calculate Destination for random submatrix
    for (int i = 0; i < cs.Length; i++)
        for (int j = 0; j < rs.Length; j++)
            destination[i] += ch.value[rs[j]][cs[i]];

    var subMatrix= GAMChromosome.GenerateMatrix(r, c, source, destination);

    //merge generated submatrix to matrix
    for (int i = 0; i < rs.Length; i++)
        for (int j = 0; j < cs.Length; j++)
            ch.value[rs[i]][cs[j]] = subMatrix[i][j];

        return subMatrix;
}

This was the code implementation around Matrix based Chromosome representation for Genetic Algorithm. The full source code about it will be published with the first beta of GPdotNET v3.0. I can promisse that the first beta will be out for less that month.
Stay tuned