ワイドオッズ算出
https://keirin-station.com/keirindb/race/odds/23/20200831/7/7/
code: js
const fmin = require('fmin');
const minOdds = [
,4.8,2.3,7.2,1.0,9.9,1.8,
,,16.1,20.8,6.1,25.7,33.0,
,,,11.0,2.2,16.6,11.2,
,,,,9.0,67.3,10.0,
,,,,,5.3,1.8,
,,,,,,98.4,
];
const maxOdds = [
,7.6,3.7,11.5,1.1,16.1,3.0,
,,17.6,21.8,9.9,27.0,37.5,
,,,12.0,3.5,18.2,13.3,
,,,,14.4,69.2,11.2,
,,,,,8.3,2.9,
,,,,,,111.0,
];
const initialIndex = 0,6,11,15,18,20;
const size = 7;
const pairSize = size*(size-1)/2;
const getId = (a,b) => {
const p1 = Math.min(a,b);
const p2 = Math.max(a,b);
return initialIndexp1 + (p2-p1-1);
}
function loss(vars) {
console.log(vars);
let ret = 0;
for (let i = 0;i < size - 1; ++i) {
for (let j = i+1;j < size; ++j) {
const allOdds = [];
for (let k = 0;k < size; ++k) {
if (k == i || k == j) { continue; }
let odds = ((((1-(varsgetId(i,j)+varsgetId(j,k)+varsgetId(k,i)))/3 / varsgetId(i,j) + 1) * 0.75 * 10) | 0)/10;
odds = Math.max(odds, 1.0);
allOdds.push(odds);
}
// console.log(i,j,allOdds, minOddsij, maxOddsij, Math.min(...allOdds), Math.max(...allOdds));
ret += Math.max(maxOddsij/Math.max(...allOdds) - 1, Math.max(...allOdds)/maxOddsij - 1);
ret += Math.max(minOddsij/Math.min(...allOdds) - 1, Math.min(...allOdds)/minOddsij - 1);
}
}
// console.log(ret);
return ret;
}
{
const initial = [];
for(let i = 0; i < pairSize; ++i) {
initial.push(1/pairSize);
}
var solution = fmin.nelderMead(loss, initial);
console.log("solution is at " + solution.x);
}
{
const initial = [];
for(let i = 0; i < pairSize; ++i) {
initial.push(1/pairSize);
}
var solution = fmin.conjugateGradient(loss, initial);
console.log("solution is at " + solution.x);
}