Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/17/18 04:47:09 (6 years ago)
Author:
hmaislin
Message:

#2929: Fixed result error

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2929_PrioritizedGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.PGE/3.3/go-code/go-pge/plug/pge_search.go

    r16191 r16231  
    1717)
    1818
    19 type PgeConfig struct {
     19type pgeConfig struct {
    2020  // search params
    2121  maxGen        int
     
    4040func pgeConfigParser(field, value string, config interface{}) (err error) {
    4141
    42   PC := config.(*PgeConfig)
     42  PC := config.(*pgeConfig)
    4343
    4444  switch strings.ToUpper(field) {
     
    9292type PgeSearch struct {
    9393  id   int
    94   cnfg PgeConfig
     94  cnfg pgeConfig
    9595  prob *probs.ExprProblem
    9696  iter int
     
    151151  return PS.cnfg.maxGen
    152152}
    153 func (PS *PgeSearch) GetPeelCount() int {
    154   return PS.cnfg.peelCnt
    155 }
    156153func (PS *PgeSearch) SetMaxIter(iter int) {
    157154  PS.cnfg.maxGen = iter
     
    183180
    184181func (PS *PgeSearch) Init(done chan int, prob *probs.ExprProblem, logdir string, input interface{}) {
    185 
    186   //fmt.Printf("Init'n PGE\n")
     182  fmt.Printf("Init'n PGE\n")
    187183  // setup data
    188184
    189185  // open logs
    190186  PS.initLogs(logdir)
    191  
    192   PS.stop = false
    193187
    194188  // copy in common config options
     
    201195  PS.cnfg.simprules = srules
    202196
    203   //fmt.Println("Roots:   ", PS.cnfg.treecfg.RootsS)
    204   //fmt.Println("Nodes:   ", PS.cnfg.treecfg.NodesS)
    205   //fmt.Println("Leafs:   ", PS.cnfg.treecfg.LeafsS)
    206   //fmt.Println("NonTrig: ", PS.cnfg.treecfg.NonTrigS)
     197  fmt.Println("Roots:   ", PS.cnfg.treecfg.RootsS)
     198  fmt.Println("Nodes:   ", PS.cnfg.treecfg.NodesS)
     199  fmt.Println("Leafs:   ", PS.cnfg.treecfg.LeafsS)
     200  fmt.Println("NonTrig: ", PS.cnfg.treecfg.NonTrigS)
    207201
    208202  PS.GenRoots = make([]expr.Expr, len(PS.cnfg.treecfg.Roots))
     
    226220
    227221    case expr.VAR:
    228       //fmt.Println("Use Vars: ", PS.cnfg.treecfg.UsableVars)
     222      fmt.Println("Use Vars: ", PS.cnfg.treecfg.UsableVars)
    229223      for _, i := range PS.cnfg.treecfg.UsableVars {
    230224        PS.GenLeafs = append(PS.GenLeafs, expr.NewVar(i))
     
    245239  ***/
    246240
    247   //fmt.Println("Roots:   ", PS.GenRoots)
    248   //fmt.Println("Nodes:   ", PS.GenNodes)
    249   //fmt.Println("Leafs:   ", PS.GenLeafs)
    250   //fmt.Println("NonTrig: ", PS.GenNonTrig)
     241  fmt.Println("Roots:   ", PS.GenRoots)
     242  fmt.Println("Nodes:   ", PS.GenNodes)
     243  fmt.Println("Leafs:   ", PS.GenLeafs)
     244  fmt.Println("NonTrig: ", PS.GenNonTrig)
    251245
    252246  // setup communication struct
     
    260254  PS.Best = probs.NewReportQueue()
    261255  PS.Best.SetSort(probs.GPSORT_PARETO_TST_ERR)
    262 
    263256  PS.Queue = PS.GenInitExpr()
    264257  PS.Queue.SetSort(probs.PESORT_PARETO_TST_ERR)
     
    283276      continue
    284277    }
    285     re := RegressExpr(e, PS.prob)
    286     //fmt.Printf("reg: %v\n", re)
    287     PS.eval_out <- re
     278    PS.eval_out <- RegressExpr(e, PS.prob)
    288279  }
    289280
     
    293284  fmt.Printf("Running PGE\n")
    294285
    295   PS.Loop()
     286  PS.loop()
    296287
    297288  fmt.Println("PGE exitting")
     
    301292}
    302293
    303 func (PS *PgeSearch) Loop() {
     294func (PS *PgeSearch) loop() {
    304295
    305296  PS.checkMessages()
     
    307298
    308299    fmt.Println("in: PS.step() ", PS.iter)
    309     PS.Step()
     300    PS.step()
    310301
    311302    // if PS.iter%PS.cnfg.pgeRptEpoch == 0 {
     
    357348}
    358349
    359 func (PS *PgeSearch) Step() {
     350func (PS *PgeSearch) step() {
     351
    360352  loop := 0
    361353  eval_cnt := 0 // for channeled eval
     
    437429  // } // for sequential eval
    438430  PS.Queue.Sort()
     431
    439432}
    440433
     
    442435  es := make([]*probs.ExprReport, PS.cnfg.peelCnt)
    443436  for p := 0; p < PS.cnfg.peelCnt && PS.Queue.Len() > 0; p++ {
     437
    444438    e := PS.Queue.Pop().(*probs.ExprReport)
     439
    445440    bPush := true
    446441    if len(e.Coeff()) == 1 && math.Abs(e.Coeff()[0]) < PS.cnfg.zeroEpsilon {
     
    451446
    452447    if bPush {
    453       fmt.Printf("pop/push DO(%d,%d): %v\n", p, PS.Best.Len(), e.Expr())
     448      fmt.Printf("pop/push(%d,%d): %v\n", p, PS.Best.Len(), e.Expr())
    454449      PS.Best.Push(e)
    455450    }
     
    471466  return es
    472467}
    473 
    474 
    475 type PeelResult struct {
    476   Es *probs.ExprReport
    477 
    478   Nobestpush bool
    479   BestNewMinErr bool
    480  
    481   Bestlen1 int
    482   Bestlen2 int
    483  
    484   Coeff []float64
    485   TestScore int
    486  
    487   Expre expr.Expr
    488   ExpreRe *probs.ExprReport
    489 }
    490 
    491 
    492 func (PS *PgeSearch) SingleStep() []*PeelResult {
    493   loop := 0
    494   eval_cnt := 0
    495   PR := PS.peelRes()
    496  
    497   es := make([]*probs.ExprReport, len(PR))
    498  
    499   for i, elem := range PR {
    500     es[i] = elem.ExpreRe
    501   }
    502  
    503   ex := PS.expandPeeled(es)
    504 
    505   for cnt := range ex {
    506     E := ex[cnt]
    507     if E == nil {
    508       continue
    509     }
    510     for _, e := range E {
    511       if e == nil {
    512         continue
    513       }
    514       if !PS.cnfg.treecfg.CheckExpr(e) {
    515         continue
    516       }
    517       serial := make([]int, 0, 64)
    518       serial = e.Serial(serial)
    519       ins := PS.Trie.InsertSerial(serial)
    520      
    521       if !ins {
    522         continue
    523       }
    524       PS.eval_in <- e
    525       eval_cnt++
    526     }
    527   }
    528   for i := 0; i < eval_cnt; i++ {
    529     re := <-PS.eval_out
    530     if math.IsNaN(re.TestError()) || math.IsInf(re.TestError(), 0) {
    531       continue
    532     }
    533     if re.TestError() < PS.minError {
    534       PS.minError = re.TestError()
    535     }
    536     doIns := true
    537     for _, c := range re.Coeff() {
    538       if math.Abs(c) < PS.cnfg.zeroEpsilon {
    539         doIns = false
    540         break
    541       }
    542     }
    543     if doIns {
    544       re.SetProcID(PS.id)
    545       re.SetIterID(PS.iter)
    546       re.SetUnitID(loop)
    547       re.SetUniqID(PS.neqns)
    548       loop++
    549       PS.neqns++
    550       PS.Queue.Push(re)
    551     }
    552   }
    553   PS.Queue.Sort()
    554 
    555   PS.reportExpr()
    556   PS.iter++
    557  
    558   return PR
    559 }
    560 
    561 func (PS *PgeSearch) peelRes() []*PeelResult {
    562   //es := make([]*probs.ExprReport, PS.cnfg.peelCnt)
    563   PRes := make([]*PeelResult, PS.cnfg.peelCnt)
    564  
    565   for p := 0; p < PS.cnfg.peelCnt && PS.Queue.Len() > 0; p++ {
    566     PR := new(PeelResult)
    567    
    568     PR.BestNewMinErr = false
    569     PR.Nobestpush = false
    570    
    571     e := PS.Queue.Pop().(*probs.ExprReport)
    572    
    573     bPush := true
    574     if len(e.Coeff()) == 1 && math.Abs(e.Coeff()[0]) < PS.cnfg.zeroEpsilon {
    575       //fmt.Println("No Best Push")
    576       PR.Nobestpush = true
    577       p--
    578       continue
    579     }
    580 
    581     if bPush {
    582       //fmt.Printf("pop/push (%d,%d): %v\n", p, PS.Best.Len(), e.Expr())
    583       PR.Bestlen1 = p
    584       PR.Bestlen2 = PS.Best.Len()
    585       PR.Expre = e.Expr()
    586       PR.ExpreRe = e
    587       PS.Best.Push(e)
    588     }
    589 
    590     //es[p] = e
    591     PR.Es = e
    592     PR.Coeff = e.Coeff()
    593     PR.TestScore = e.TestScore()
    594    
    595    
    596     if e.TestScore() > PS.maxScore {
    597       PS.maxScore = e.TestScore()
    598     }
    599     if e.TestError() < PS.minError {
    600       PS.minError = e.TestError()
    601       PR.BestNewMinErr = true
    602       //fmt.Printf("Best New Min Error:  %v\n", e)
    603     }
    604     if e.Size() > PS.maxSize {
    605       PS.maxSize = e.Size()
    606     }
    607    
    608     PRes[p] = PR
    609   }
    610  
    611   return PRes
    612 }
    613 
    614468
    615469func (PS *PgeSearch) expandPeeled(es []*probs.ExprReport) [][]expr.Expr {
     
    633487    // fmt.Println()
    634488  }
     489  fmt.Println("\n")
    635490  return eqns
    636491}
     
    668523
    669524func (PS *PgeSearch) Clean() {
     525  // fmt.Printf("Cleaning PGE\n")
     526
    670527  PS.errLogBuf.Flush()
    671528  PS.mainLogBuf.Flush()
     
    673530  PS.fitnessLogBuf.Flush()
    674531  PS.ipreLogBuf.Flush()
     532
    675533}
    676534
     
    747605  if len(guess) > 0 {
    748606
    749     //fmt.Printf("IMREGEXP %v %v\n", P.SearchType, P.SearchVar)
    750     //fmt.Printf("REGPTrain %T | %#v | %v\n", P.Train, P.Train, P.Train)
    751     //fmt.Printf("eqn %T | %#v | %v\n", eqn, eqn, eqn)
    752     //fmt.Printf("guess %T | %#v | %v\n", guess, guess, guess)
     607    // fmt.Printf("x_dims:  %d  %d\n", x_dim, x_dim2)
    753608
    754609    // Callback version
    755    
    756    
    757610    coeff = levmar.LevmarExpr(eqn, P.SearchVar, P.SearchType, guess, P.Train, P.Test)
    758    
    759611
    760612    // Stack version
     
    789641  R = new(probs.ExprReport)
    790642  R.SetExpr(eqn) /*.ConvertToConstantFs(coeff)*/
    791 
    792643  R.SetCoeff(coeff)
    793644  R.Expr().CalcExprStats()
     
    856707  return
    857708}
    858 
    859 func (PS *PgeSearch) CreateDS(maxGen int, pgeRptEpoch int, pgeRptCount int, pgeArchiveCap int, peelCnt int, evalrCount int, zeroEpsilon float64, initMethod string, growMethod string, sortType int) {
    860   PS.id = 0 //maxGen
    861  
    862   var PC PgeConfig
    863  
    864   PC.pgeRptEpoch = pgeRptEpoch
    865   PC.pgeRptCount = pgeRptCount
    866   PC.pgeArchiveCap = pgeArchiveCap
    867   PC.peelCnt = peelCnt
    868   PC.evalrCount = evalrCount
    869   PC.zeroEpsilon = zeroEpsilon
    870   PC.initMethod = initMethod
    871   PC.growMethod = growMethod
    872 
    873   if sortType == 1 {
    874     PC.sortType = probs.PESORT_PARETO_TRN_ERR
    875   } else { 
    876     PC.sortType = probs.PESORT_PARETO_TST_ERR
    877   }
    878 
    879   PC.maxGen = maxGen
    880   PS.cnfg = PC
    881    
    882   PS.iter = 0
    883 }
    884 
    885 func (PS *PgeSearch) SetProb(ep *probs.ExprProblem) {
    886   PS.prob = ep
    887 }
    888 func (PS *PgeSearch) GetIter() int {
    889   return PS.iter
    890 }
Note: See TracChangeset for help on using the changeset viewer.