uidAsFeatureVector($uid), $this->ipToVec($ip) ); } /** * @return float[] */ public function generateRandomIpVector(): array { return $this->ipToVec($this->generateRandomIp()); } /** * @param string $ip * * @return int[] */ abstract protected function ipToVec(string $ip): array; /** * @param string $uid * * @return int[] */ protected function uidAsFeatureVector(string $uid): array { // TODO: just convert to binary and do substr of that $splitHash = str_split( substr( md5($uid), 0, 4 ) ); return $this->numStringsToBitArray($splitHash, 16, 4); } protected function numStringsToBitArray(array $strings, $base, $padding): array { $converted = array_reduce(array_map(function (string $s) use ($base, $padding) { return $this->numStringToBitArray($s, $base, $padding); }, $strings), 'array_merge', []); return array_map(function ($x) { return (int)$x; }, $converted); } protected function numStringToBitArray(string $s, int $base, int $padding): array { $bin = base_convert($s, $base, 2); // make sure we get 00000000 to 11111111 $padded = str_pad($bin, $padding, '0', STR_PAD_LEFT); return str_split($padded); } abstract public function generateRandomIp(): string; abstract public function getSize(): int; abstract public function getDefaultMlpConfig(): Config; }