debug mixture implementation
This commit is contained in:
parent
2f663b1262
commit
884adba214
9
fermi.go
9
fermi.go
|
@ -357,7 +357,7 @@ func operateDists(old_dist Dist, new_dist Dist, op string) (Dist, error) {
|
||||||
func parseMixture(words []string, vars map[string]Dist) (Dist, error) {
|
func parseMixture(words []string, vars map[string]Dist) (Dist, error) {
|
||||||
// mx, mix, var weight var weight var weight ...
|
// mx, mix, var weight var weight var weight ...
|
||||||
// Check syntax
|
// Check syntax
|
||||||
if len(words)%2 != 1 || words[0] != "mx" {
|
if len(words)%2 != 0 {
|
||||||
return nil, printAndReturnErr("Not a mixture. \nMixture syntax: \nmx x 2.5 y 8 z 10\ni.e.: mx var weight var2 weight2 ... var_n weight_n")
|
return nil, printAndReturnErr("Not a mixture. \nMixture syntax: \nmx x 2.5 y 8 z 10\ni.e.: mx var weight var2 weight2 ... var_n weight_n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,7 +365,7 @@ func parseMixture(words []string, vars map[string]Dist) (Dist, error) {
|
||||||
var fs [][]float64
|
var fs [][]float64
|
||||||
var weights []float64
|
var weights []float64
|
||||||
|
|
||||||
for i, word := range words[1:] {
|
for i, word := range words {
|
||||||
if i%2 == 0 {
|
if i%2 == 0 {
|
||||||
dist, exists := vars[word]
|
dist, exists := vars[word]
|
||||||
if !exists {
|
if !exists {
|
||||||
|
@ -400,7 +400,7 @@ func parseWordsIntoOpAndDist(words []string, vars map[string]Dist) (string, Dist
|
||||||
var dist Dist
|
var dist Dist
|
||||||
|
|
||||||
switch words[0] {
|
switch words[0] {
|
||||||
case "*", "/", "+", "-":
|
case "*", "/", "+", "-", "mx":
|
||||||
op = words[0]
|
op = words[0]
|
||||||
words = words[1:]
|
words = words[1:]
|
||||||
default:
|
default:
|
||||||
|
@ -448,13 +448,14 @@ func parseWordsIntoOpAndDist(words []string, vars map[string]Dist) (string, Dist
|
||||||
return parseWordsErr("Input not understood or not implemented yet")
|
return parseWordsErr("Input not understood or not implemented yet")
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
switch words[0] {
|
switch op {
|
||||||
case "mx":
|
case "mx":
|
||||||
tmp, err := parseMixture(words, vars)
|
tmp, err := parseMixture(words, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return parseWordsErr("Error parsing a mixture: " + err.Error())
|
return parseWordsErr("Error parsing a mixture: " + err.Error())
|
||||||
}
|
}
|
||||||
dist = tmp
|
dist = tmp
|
||||||
|
op = "*"
|
||||||
default:
|
default:
|
||||||
return parseWordsErr("Input not understood or not implemented yet")
|
return parseWordsErr("Input not understood or not implemented yet")
|
||||||
}
|
}
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -1,3 +1,5 @@
|
||||||
module git.nunosempere.com/NunoSempere/fermi
|
module git.nunosempere.com/NunoSempere/fermi
|
||||||
|
|
||||||
go 1.22.1
|
go 1.22.1
|
||||||
|
|
||||||
|
require github.com/pkg/errors v0.9.1 // indirect
|
||||||
|
|
2
go.sum
Normal file
2
go.sum
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
9
mixture.fermi
Normal file
9
mixture.fermi
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
1 100
|
||||||
|
=. x
|
||||||
|
|
||||||
|
2K 200K
|
||||||
|
=. y
|
||||||
|
|
||||||
|
mx x 40% y 60%
|
||||||
|
stats
|
||||||
|
exit
|
|
@ -1,6 +1,7 @@
|
||||||
package sample
|
package sample
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
@ -180,12 +181,13 @@ func Sample_mixture_serially(fs [][]float64, weights []float64, n_samples int) (
|
||||||
return nil, errors.New("Cummulative sum of weights in mixture must be > 0.0")
|
return nil, errors.New("Cummulative sum of weights in mixture must be > 0.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
var flag int = 0
|
fmt.Printf("Weights: %v\n", cumsummed_normalized_weights)
|
||||||
var p float64 = global_state.Float64()
|
|
||||||
|
|
||||||
xs := make([]float64, n_samples)
|
xs := make([]float64, n_samples)
|
||||||
// var global_state = rand.New(rand.NewPCG(uint64(1), uint64(2)))
|
// var global_state = rand.New(rand.NewPCG(uint64(1), uint64(2)))
|
||||||
for i := 0; i < n_samples; i++ {
|
for i := 0; i < n_samples; i++ {
|
||||||
|
var flag int = 0
|
||||||
|
var p float64 = global_state.Float64()
|
||||||
for j, cnw := range cumsummed_normalized_weights {
|
for j, cnw := range cumsummed_normalized_weights {
|
||||||
if p < cnw {
|
if p < cnw {
|
||||||
xs[i] = fs[j][i]
|
xs[i] = fs[j][i]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user