PFANN::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 11
ccs 0
cts 11
cp 0
crap 2
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Klass PFANN.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Parallellisering;
11
12
/**
13
 * Kontrollera inte nya moduler under parallell exekvering.
14
 */
15
define('GENERERA', true);
16
17
use Tips\Klasser\Preludium;
18
use Tips\Klasser\Spel;
19
use Tips\Klasser\Tips;
20
use Tips\Klasser\DBPreferenser;
21
use Tips\Moduler\FANN;
22
23
require_once dirname(__FILE__) . '/../../vendor/autoload.php';
24
new Preludium();
25
26
/**
27
 * Klass PFANN.
28
 * Generera FANN under parallell exekvering.
29
 */
30
final class PFANN {
31
	private Spel $spel;
32
	private Tips $tips;
33
	private FANN $fann;
34
	private DBPreferenser $db_preferenser;
35
36
	/**
37
	 * Initiera.
38
	 */
39
	public function __construct() {
40
		$this->spel = new Spel();
41
		$this->tips = new Tips($this->spel);
42
		$this->db_preferenser = new DBPreferenser($this->spel->db);
43
		$this->fann = new FANN(
44
			$this->tips->utdelning,
45
			$this->tips->odds,
46
			$this->tips->streck,
47
			$this->tips->matcher
48
		);
49
		$this->pfann();
50
	}
51
52
	/**
53
	 * Parallellisera FANN.
54
	 */
55
	private function pfann(): void {
56
		/**
57
		 * Hämta sparade data från databas.
58
		 */
59
		$bästa_lösning = array_map(
60
			'floatval',
61
			explode(',', $this->db_preferenser->hämta_preferens('fann.parametrar'))
62
		);
63
64
		$oddssannolikheter = återbygg_matris(
65
			$this->db_preferenser->hämta_preferens('parallellisering.oddssannolikheter', 'temp')
66
		);
67
68
		$strecksannolikheter = återbygg_matris(
69
			$this->db_preferenser->hämta_preferens('parallellisering.strecksannolikheter', 'temp')
70
		);
71
72
		$tipsrader = explode(',', $this->db_preferenser->hämta_preferens('parallellisering.tipsrader', 'temp'));
73
74
		$partitioner = $this->db_preferenser->hämta_preferens('parallellisering.partitioner', 'temp');
75
		$mängder = återbygg_matris(
76
			$this->db_preferenser->hämta_preferens('parallellisering.mängder', 'temp'),
77
			3,
78
			(int) $partitioner
79
		);
80
81
		/**
82
		 * Iterera fram bästa lösning.
83
		 */
84
		$r_bästa_lösning = 0;
85
		$vektorer = extrahera(); // hämta parametrar från querysträng.
86
		foreach ($mängder[vektorprodukt($vektorer, [1, 3, 9, 27])] as $limiter) {
87
			$summa_antal_rätt = 0;
88
			/**
89
			 * Över samtliga kompletta tipsrader.
90
			 */
91
			foreach ($tipsrader as $k => $tipsrad_012) {
92
				$rådata = [];
93
				/**
94
				 * Över varje match.
95
				 */
96
				foreach ($oddssannolikheter[$k] as $j => $odds_s) {
97
					$streck_s = $strecksannolikheter[$k][$j];
98
					/**
99
					 * Kör FANN med kombination av odds och streck.
100
					 * Addera till rådata.
101
					 */
102
					$res = fann_run(
103
						$this->fann->fann,
104
						[$odds_s[0],
105
						$streck_s[0],
106
						$odds_s[1],
107
						$streck_s[1],
108
						$odds_s[2],
109
						$streck_s[2]]
110
					);
111
					$rådata[] = $res[0];
112
				}
113
114
				$summa_antal_rätt += antal_rätt($this->fann->beräkna_utdata($rådata, $limiter), $tipsrad_012);
115
			}
116
117
			/**
118
			 * Ny bästa lösning?
119
			 */
120
			if ($summa_antal_rätt > $r_bästa_lösning) {
121
				$bästa_lösning = $limiter;
122
				$r_bästa_lösning = $summa_antal_rätt;
123
			}
124
		}
125
126
		/**
127
		 * Spara resultat för vidare behandling.
128
		 */
129
		$data = implode(',', [$r_bästa_lösning, implode(',', $bästa_lösning)]);
130
		$this->tips->parallellisering->populera_databas($data, $vektorer);
131
	}
132
}
133
134
new PFANN();
135