github.com/RH12503/Triangula@v1.2.0/algorithm/algorithm_test.go (about)

     1  package algorithm
     2  
     3  import (
     4  	"github.com/RH12503/Triangula/algorithm/evaluator"
     5  	"github.com/RH12503/Triangula/fitness"
     6  	"github.com/RH12503/Triangula/generator"
     7  	imageData "github.com/RH12503/Triangula/image"
     8  	"github.com/RH12503/Triangula/mutation"
     9  	"github.com/RH12503/Triangula/normgeom"
    10  	"github.com/RH12503/Triangula/random"
    11  	"image"
    12  	_ "image/jpeg"
    13  	"log"
    14  	"math/rand"
    15  	"os"
    16  	"testing"
    17  	"time"
    18  )
    19  
    20  func BenchmarkAlgorithm(b *testing.B) {
    21  	rand.Seed(time.Now().UnixNano())
    22  	random.Seed(time.Now().UnixNano())
    23  
    24  	file, err := os.Open("../imgs/clown.jpg")
    25  
    26  	if err != nil {
    27  		panic(err)
    28  	}
    29  
    30  	imageFile, _, err := image.Decode(file)
    31  
    32  	file.Close()
    33  
    34  	if err != nil {
    35  		log.Fatal(err)
    36  	}
    37  
    38  	imgData := imageData.ToData(imageFile)
    39  
    40  	if err != nil {
    41  		log.Fatal("Arg #2 not an integer")
    42  	}
    43  
    44  	pointFactory := func() normgeom.NormPointGroup {
    45  
    46  		return (generator.RandomGenerator{}).Generate(1000)
    47  	}
    48  	evaluatorFactory := func(n int) evaluator.Evaluator {
    49  		return evaluator.NewParallel(fitness.TrianglesImageFunctions(imgData, 5, n), 22)
    50  	}
    51  
    52  	mutator := mutation.NewGaussianMethod(2/1000, 0.3)
    53  
    54  	algo := NewModifiedGenetic(pointFactory, 400, 5, evaluatorFactory, mutator)
    55  
    56  	real := func() {
    57  		for i := 0; i < 3000; i++ {
    58  			algo.Step()
    59  		}
    60  	}
    61  	real()
    62  }