Оптимизация параметров функции с фиксированной переменной - PullRequest
0 голосов
/ 31 марта 2020

У меня тут небольшая интересная проблема. Сначала я приведу некоторую справочную информацию: сама проблема связана с игрой, в которой есть работники, которые могут работать над 4 различными проектами. Каждый проект возвращает определенную сумму вознаграждения, а также требует определенного времени для завершения. Я хотел попытаться оптимизировать вознаграждение / секунду, чтобы попытаться найти оптимальное распределение работников. Вы также можете усовершенствовать своих работников, чтобы дать им больше возможностей, хотя я не думаю, что это имеет слишком большое значение для моей проблемы.

Так что сейчас я расскажу подробнее о 1029 *. Возврат каждого проекта вычисляется с помощью довольно простой функции:

 - Project 1: return = 0.1 * workers * worker_capacity
 - Project 2: return = 0.25 * workers * worker_capacity
 - Project 3: return = 0.5 * workers * worker_capacity
 - Project 4: return = 0.75 * workers * worker_capacity

Как уже говорилось, очень простые (линейные) функции. Единственное, что меняется, это первый фактор нашего расчета. Я буду называть это return_factor отныне. Итак, по сути:

return_factor = [0.1, 0.25, 0.5, 0.75]

Теперь время вычисляется с помощью более сложных функций: (результат - количество секунд)

time = Math.round(
    (
        Math.pow(
            workers * worker_capacity * (return_factor * 100) * workers * worker_capacity *return_factor, 
            0.45
        ) + 1800
    ) * 0.9045869428
)

Код выше написан на javascript , Я сам по себе python парень, но я думаю, что эта функция понятна большинству людей с базовыми c знаниями в области программирования и математики.

Так что я точно знаю, каковы отдача и время для каждого проекта рассчитывается. Функция возврата / секунды для каждого проекта легко найти, разделив функцию возврата на функцию времени для соответствующего проекта. Теперь мне просто нужно знать, как оптимизировать эту возврат / секунду. Я думаю, что есть 2 возможных подхода:

  1. Имеют 4 разные функции возврата / секунды. Таким образом, для каждого проекта я делю функцию возврата на функцию времени, чтобы найти возврат / секунду для конкретного проекта. Затем я пытаюсь найти оптимальное распределение для моих работников, выполняя большое количество итераций и заполняя различные значения для каждой функции, пока не будет найден оптимальный общий возврат / секунду. Имейте в виду, что общее значение возврата / секунды будет составлять 4 функции.
  2. Имеет 1 функцию возврата / секунды с 4 параметрами. Один параметр для каждого проекта, который обозначает количество работников, которые направляются на работу над конкретным проектом. (Эта агрегатная функция на самом деле является той же агрегатной функцией, которую я только что упомянул в первом подходе)

Теперь я просто не могу понять, как решить эту проблему. Я нашел некоторую информацию о itertools.product в python, но моя проблема в том, что возможные значения для каждого параметра могут быть изменены.

Например: скажем, у меня 200 рабочих. Сначала каждый параметр / проект имеет одинаковое количество возможных значений: [0: 200] Однако, когда я назначаю, скажем, 20 рабочих для первого проекта, остальные 3 проекта имеют возможные значения: [0: 180]

Я знаю, что это было довольно прочитано. Буду очень признателен, если кто-нибудь здесь сможет помочь мне решить эту проблему. Желательно с Python, так как я пытаюсь узнать что-то новое в Python :) Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...