Passed
Push — main ( a92fbe...d29be2 )
by N.
05:41 queued 01:24
created

Parametrar   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 102
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 49
dl 0
loc 102
ccs 0
cts 52
cp 0
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A generera_parametrar() 0 62 2
A behandla_parallellisering() 0 24 4
1
<?php
2
3
/**
4
 * Klass Parametrar.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Moduler\FANNGenerera;
11
12
use PDO;
13
use Tips\Klasser\Parallellisering;
14
15
/**
16
 * Klass Parametrar.
17
 * Generera parametrar för FANN.
18
 */
19
class Parametrar extends MonteCarlo {
20
	private Parallellisering $parallellisering;
21
	public bool $exists_fann = false;
22
	protected int $antal_lager = 2;
23
	protected int $max_neuroner = 10000;
24
25
	/**
26
	 * Generera parametrar med Monte Carlo-metod.
27
	 */
28
	protected function generera_parametrar(): void {
29
		/**
30
		 * Kräv anslutning till neuralt nätverk.
31
		 */
32
		if (!$this->exists_fann) {
33
			return;
34
		}
35
36
		/**
37
		 * Initiera parallell behandling.
38
		 */
39
		$this->parallellisering = new Parallellisering($this->fann->odds->spel);
40
41
		/**
42
		 * Partitionera datamängd.
43
		 */
44
		$partitioner = intval($this->mc_antal_punkter / $this->trådar);
45
		$mängder = array_chunk($this->monte_carlo(), max(1, abs($partitioner)));
46
47
		/**
48
		 * Spara oddssannolikheter med mera till temporär databas.
49
		 * Hämtas sedermera av bakgrundsskript i partitionerade segment.
50
		 */
51
		$this->fann->db_preferenser->spara_preferens(
52
			'parallellisering.oddssannolikheter',
53
			implode(',', platta_matris($this->oddssannolikheter)),
54
			'temp'
55
		);
56
57
		$this->fann->db_preferenser->spara_preferens(
58
			'parallellisering.strecksannolikheter',
59
			implode(',', platta_matris($this->strecksannolikheter)),
60
			'temp'
61
		);
62
63
		$this->fann->db_preferenser->spara_preferens(
64
			'parallellisering.tipsrader',
65
			implode(',', $this->tipsrader),
66
			'temp'
67
		);
68
69
		$this->fann->db_preferenser->spara_preferens(
70
			'parallellisering.mängder',
71
			implode(',', platta_matris($mängder)),
72
			'temp'
73
		);
74
75
		$this->fann->db_preferenser->spara_preferens(
76
			'parallellisering.partitioner',
77
			(string) $partitioner,
78
			'temp'
79
		);
80
81
		/**
82
		 * Påbörja parallell behandling.
83
		 */
84
		$this->parallellisering->parallellisera(PARALLELLISERING . '/PFANN.php');
0 ignored issues
show
Bug introduced by
The constant Tips\Moduler\FANNGenerera\PARALLELLISERING was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
85
		$bästa_lösning = $this->behandla_parallellisering();
86
87
		$this->fann->db_preferenser->spara_preferens(
88
			'fann.parametrar',
89
			implode(',', $bästa_lösning)
90
		);
91
	}
92
93
	/**
94
	 * Ta fram parametrar med parallella processer.
95
	 * @return float[]
96
	 */
97
	private function behandla_parallellisering(): array {
98
		$this->parallellisering->vänta_på_databas();
99
100
		$antal_rätt_bästa = 0;
101
		$bästa_lösning = [];
102
		$sats = $this->fann->odds->spel->db->temp->query("SELECT `val` FROM `parallellisering`");
103
		if ($sats !== false) {
104
			foreach ($sats->fetchAll(PDO::FETCH_ASSOC) as $r) {
105
				$lösning = array_map('floatval', explode(',', $r['val']));
106
				$summa_antal_rätt = array_shift($lösning);
107
				if ($summa_antal_rätt > $antal_rätt_bästa) {
108
					$antal_rätt_bästa = $summa_antal_rätt;
109
					$bästa_lösning = $lösning;
110
				}
111
			}
112
		}
113
114
		/**
115
		 * Rensa temporär databas.
116
		 */
117
		$this->fann->odds->spel->db->temp->exec("DELETE FROM `parallellisering`");
118
		$this->fann->odds->spel->db->temp->exec("DELETE FROM `preferenser`");
119
120
		return $bästa_lösning;
121
	}
122
}
123