Формула для расчета ЗП

Есть такие данные input {workTime: 3600, keyCount: 5000, freeTime: 120} (-сколько человек работал, сколько сделал нажатий, сколько отдыхал) И output {cash: 2400} (сколько заработает, если будет работать столько, сколько в input). Таких вариаций может быть много.

Я получаю данные workTime, keyCount, freeTime, они могут быть любыми. Нужно получить то, сколько заработает человек.

Я пробовал вывести формулу, но не получилось. Я думаю, что можно использовать нейросеть (brain.js например). Я попробовал поиграться, но оказывается, что данные должны быть от 0 до 1. Я попробовал подавать данные для обучения в таком формате: 1/input. Но почему-то для любых вариаций было примерно одинаковое значение.

Вот то, что я пробовал

const net = new brain.NeuralNetwork({
  hiddenLayers: [10],
  iterations: 20000
});

net.train([{
    input: [1 / 5000, 1 / 3600, 0],
    output: [1 / 2400]
  },
  {
    input: [1 / 5000, 1 / 3600, 1 / 240],
    output: [1 / 1800]
  },
  {
    input: [1 / 3000, 1 / 3600, 1 / 120],
    output: [1 / 1800]
  },
  {
    input: [1 / 6000, 1 / 7200, 1 / 120],
    output: [1 / 3600]
  },
]);

const output = net.run([1 / 3000, 1 / 7200, 1 / 120]); // { white: 0.99, black: 0.002 }
console.log(1 / output);
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/brain/0.6.3/brain.min.js"></script>
</head>

<body>

</body>

</html>

Как сделать такую нейронную сеть? Или какую можно придумать формулу?


Ответы (1 шт):

Автор решения: PashaPash

Вы тренируете на близких к нулю значениях, и получаете близкое к нулю значение.

Нормализуйте все подряд.

const net = new brain.NeuralNetwork({
  hiddenLayers: [10],
  iterations: 20000
});

net.train([{
    input: [1 / 5, 1 / 1, 0],
    output: [1 / 4]
  },
  {
    input: [1 / 5, 1 / 1, 1 / 2],
    output: [1 / 3]
  },
  {
    input: [1 / 3, 1 / 1, 1],
    output: [1 / 3]
  },
  {
    input: [1 / 6, 1 / 2, 1],
    output: [1 / 6]
  },
]);

const output = net.run([1 / 5, 1 / 1, 1 / 2]); 
console.log(1 / output); // примерно 3
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/brain/0.6.3/brain.min.js"></script>
</head>

<body>

</body>

</html>

→ Ссылка