Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import scala.collection.mutable
- import scala.io.Source
- import scala.util.Random
- object C {
- val n = 3
- val K = 0.5
- }
- class Kromosom(var elementi:List[Float]) {
- val vjerojatnostMutacije = C.n/elementi.size
- //Krizanje
- def X (that:Kromosom):Kromosom = {
- val dijete = for(i <- 0 to (elementi.size-1)) yield (elementi(i) + that.elementi(i))/2
- new Kromosom(dijete.toList)
- }
- //Mutacija
- def unary_! = {
- val brojMutiranih = (vjerojatnostMutacije*elementi.size).toInt
- val pozicije = Seq.fill(brojMutiranih)(Random.nextInt()).map(i=>Math.abs(i)%elementi.size)
- val nova = mutable.MutableList(elementi:_*)
- pozicije.foreach(i=>nova(i)+=(Random.nextGaussian()*C.K).toFloat)
- new Kromosom(List(nova:_*))
- }
- def getTezineBridova() = elementi.take(C.n)
- def getTezineNeurona() = elementi.take(C.n*2).drop(C.n)
- def getTezineIzlaza() = elementi.drop(C.n*2)
- }
- object Zadatak {
- var jedinke:List[Kromosom] = List()
- var listUlaza:mutable.HashMap[Float,Float] = new mutable.HashMap[Float,Float]()
- def main(args:Array[String]) {
- for(line <- Source.fromFile("train-set.txt").getLines()) {
- val polje = line.split(" ")
- listUlaza(polje(0).toFloat) = polje(1).toFloat
- }
- var brojKromosoma = Console.readLine().toInt
- jedinke = (for(i<-0 to brojKromosoma) yield new Kromosom(Seq.fill(C.n*3)(Random.nextInt()).map(i=>(i%10).toFloat).toList)).toList
- var uvjet = false
- while(!uvjet) {
- var listaGreski:List[(Float,Kromosom)] = List()
- for(k <- 0 to(brojKromosoma-1)) {
- var pogreska=0.0f
- for((x,t) <-listUlaza) {
- val tezineBridova = jedinke(k).getTezineBridova()
- val tezineNeurona = jedinke(k).getTezineNeurona()
- val tezineIzlaza = jedinke(k).getTezineIzlaza()
- for(i<- 0 to (C.n-1)) {
- val rez = (x*tezineBridova(i) + tezineNeurona(i)) * tezineIzlaza(i)
- val sig = 1/(1+Math.exp(-rez))
- pogreska += (t-sig.toFloat)*(t-sig.toFloat)
- }
- }
- pogreska = pogreska / listUlaza.size
- if(pogreska < 0.5) uvjet = true
- println(s"${pogreska} \t ${jedinke(k).elementi}")
- listaGreski.:+=((pogreska,jedinke(k)))
- }
- jedinke = stvoriNovuPopulaciju(listaGreski,brojKromosoma)
- println("="*30)
- }
- }
- def stvoriNovuPopulaciju(lista:List[(Float,Kromosom)],brojKromosoma:Int):List[Kromosom] = {
- val sortirano = lista.sortWith((a,b) => a._1 < b._1)
- val najbolji = List(sortirano(0)._2)
- val listaParova = for(x<-sortirano; y<-sortirano
- if(x._2 != y._2)) yield (x,y)
- val a = listaParova.take(brojKromosoma).map(i=>{
- val dijete:Kromosom = i._1._2 X i._2._2
- ! dijete // Mutiraj ga
- })
- return najbolji ::: a
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement