Advertisement
Guest User

Untitled

a guest
Jun 9th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.84 KB | None | 0 0
  1. import scala.collection.mutable
  2. import scala.io.Source
  3. import scala.util.Random
  4.  
  5. object C {
  6.   val n = 3
  7.   val K = 0.5
  8. }
  9.  
  10.  
  11. class Kromosom(var elementi:List[Float]) {
  12.  
  13.   val vjerojatnostMutacije = C.n/elementi.size
  14.  
  15.   //Krizanje
  16.   def X (that:Kromosom):Kromosom = {
  17.  
  18.    val  dijete = for(i <- 0 to (elementi.size-1)) yield (elementi(i) + that.elementi(i))/2
  19.  
  20.     new Kromosom(dijete.toList)
  21.  
  22.   }
  23.  
  24.   //Mutacija
  25.   def unary_! = {
  26.     val brojMutiranih = (vjerojatnostMutacije*elementi.size).toInt
  27.     val pozicije = Seq.fill(brojMutiranih)(Random.nextInt()).map(i=>Math.abs(i)%elementi.size)
  28.  
  29.  
  30.     val nova = mutable.MutableList(elementi:_*)
  31.  
  32.     pozicije.foreach(i=>nova(i)+=(Random.nextGaussian()*C.K).toFloat)
  33.     new Kromosom(List(nova:_*))
  34.   }
  35.  
  36.   def getTezineBridova() = elementi.take(C.n)
  37.   def getTezineNeurona() = elementi.take(C.n*2).drop(C.n)
  38.   def getTezineIzlaza() = elementi.drop(C.n*2)
  39. }
  40.  
  41. object Zadatak {
  42.  
  43.   var jedinke:List[Kromosom] = List()
  44.  
  45.   var listUlaza:mutable.HashMap[Float,Float] = new mutable.HashMap[Float,Float]()
  46.  
  47.   def main(args:Array[String]) {
  48.  
  49.  
  50.  
  51.     for(line <- Source.fromFile("train-set.txt").getLines()) {
  52.       val polje = line.split(" ")
  53.       listUlaza(polje(0).toFloat) = polje(1).toFloat
  54.     }
  55.  
  56.     var brojKromosoma = Console.readLine().toInt
  57.     jedinke = (for(i<-0 to brojKromosoma) yield new Kromosom(Seq.fill(C.n*3)(Random.nextInt()).map(i=>(i%10).toFloat).toList)).toList
  58.  
  59.     var uvjet = false
  60.  
  61.     while(!uvjet) {
  62.  
  63.       var listaGreski:List[(Float,Kromosom)] = List()
  64.  
  65.       for(k <- 0 to(brojKromosoma-1)) {
  66.         var pogreska=0.0f
  67.         for((x,t) <-listUlaza) {
  68.           val tezineBridova = jedinke(k).getTezineBridova()
  69.           val tezineNeurona = jedinke(k).getTezineNeurona()
  70.           val tezineIzlaza = jedinke(k).getTezineIzlaza()
  71.  
  72.           for(i<- 0 to (C.n-1)) {
  73.             val rez = (x*tezineBridova(i) + tezineNeurona(i)) * tezineIzlaza(i)
  74.             val sig = 1/(1+Math.exp(-rez))
  75.             pogreska += (t-sig.toFloat)*(t-sig.toFloat)
  76.           }
  77.         }
  78.         pogreska = pogreska / listUlaza.size
  79.  
  80.         if(pogreska < 0.5) uvjet = true
  81.         println(s"${pogreska} \t ${jedinke(k).elementi}")
  82.         listaGreski.:+=((pogreska,jedinke(k)))
  83.       }
  84.  
  85.  
  86.       jedinke = stvoriNovuPopulaciju(listaGreski,brojKromosoma)
  87.       println("="*30)
  88.     }
  89.   }
  90.  
  91.   def stvoriNovuPopulaciju(lista:List[(Float,Kromosom)],brojKromosoma:Int):List[Kromosom] = {
  92.  
  93.     val sortirano = lista.sortWith((a,b) => a._1 < b._1)
  94.  
  95.     val najbolji = List(sortirano(0)._2)
  96.  
  97.     val listaParova = for(x<-sortirano; y<-sortirano
  98.                           if(x._2 != y._2)) yield (x,y)
  99.  
  100.  
  101.     val a = listaParova.take(brojKromosoma).map(i=>{
  102.       val dijete:Kromosom = i._1._2 X i._2._2
  103.       ! dijete // Mutiraj ga
  104.     })
  105.  
  106.    return  najbolji ::: a
  107.  
  108.   }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement