-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_4.js
57 lines (46 loc) · 1.4 KB
/
example_4.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// @ts-check
'use strict'
const GA = require('./vovk-ga')
const trainer = new GA()
console.log(`Example 4: String combination optimization`)
const desiredOutput = 'To be or not to be, that is the question.'
const parameters = { variable: 'myMessage', size: desiredOutput.length, type: 'string', options: 'abcdefghijklmonpqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.!?-_' }
const fitnessFunction = (sample) => {
const { myMessage } = sample
let correctCharacters = 0
desiredOutput.split('').forEach((c, i) => {
if (c === myMessage.split('')[i])
correctCharacters++;
})
const score = correctCharacters / desiredOutput.length
return score
}
const conf = {
//debug: false,
maxPopulation: 2500,
survivorsPERCENT: 0.02,
crossoverChance: 0.05,
mutationChance: 0.01,
//mutationPower: 0.1,
bestSurvive: true,
parameters: parameters,
//initialValues: { x: 0, y: 0 },
fitnessFunction: fitnessFunction,
fitnessTargetValue: 1,
fitnessTimeout: 10000,
//fitnessTargetTolerance: 1e-15,
}
const logProgress = progress => {
console.log(progress.message)
}
const logResult = result => {
console.log(result.message)
}
const catchError = e => {
if (e === 'timeout') console.log('Training timeout!')
else throw e
}
console.log(`Starting training...`)
trainer.configure(conf).evolve(100, logProgress)
.then(logResult)
.catch(catchError)