У меня задача оптимизировать стоимость продукта, например, найдя оптимальное сочетание баллончиков с краской разного объёма и цены для окраски данного квадрата.
Самый простой пример:
где list[0] — объем конкретной банки, list[1] — расход краски на квадратный метр, а list[2] — цена за банку.
Фактически я получил вполне рабочее решение с помощью библиотеки Pulse:
У меня задача оптимизировать стоимость продукта, например, найдя оптимальное сочетание баллончиков с краской разного объёма и цены для окраски данного квадрата. Самый простой пример: [code]pdict = {'Can_9ltr':[9, 0.17, 4870], 'Can_4.5ltr':[4.5, 0.17, 2910], 'Can_1ltr':[1, 0.17, 632], 'Can_2.25ltr':[2.25, 0.17, 1790]} [/code] где list[0] — объем конкретной банки, list[1] — расход краски на квадратный метр, а list[2] — цена за банку. Фактически я получил вполне рабочее решение с помощью библиотеки Pulse: [code]{'Target_value': 30, 'Optimal_set': {'Can_1ltr': {'CPU': 632, 'Amount': 1.0, 'Cost': 632.0}, 'Can_2.25ltr': {'CPU': 1790, 'Amount': 0.0, 'Cost': 0.0}, 'Can_4.5ltr': {'CPU': 2910, 'Amount': 1.0, 'Cost': 2910.0}, 'Can_9ltr': {'CPU': 4870, 'Amount': 0.0, 'Cost': 0.0}}, 'Cost_total': 3542.0} [/code] Код ниже: [code]import pulp import math
def calculator(prod_dict, target_value): prods = list(prod_dict.keys()) costs = {} for key in prod_dict: costs[key] = prod_dict[key][2] exps = {} for key in prod_dict: exps[key] = prod_dict[key][0]/prod_dict[key][1] upperBound = math.ceil(target_value/max([prod_dict[a][0]/prod_dict[a][1] for a in prod_dict]))\ *max([prod_dict[a][0]/prod_dict[a][1] for a in prod_dict]) prob = pulp.LpProblem('optimal_count', pulp.LpMinimize) prods_vars = pulp.LpVariable.dicts('prods', prods, lowBound=0, cat=pulp.LpInteger)
prob += (pulp.lpSum([costs[i] * prods_vars[i] for i in prods]),"total_cost") prob += (pulp.lpSum([exps[i] * prods_vars[i] for i in prods]) >= target_value, "lowerBound") prob += (pulp.lpSum([exps[i] * prods_vars[i] for i in prods])
У меня огромная проблема с linprog, состоящая почти из 1 тыс. переменных и ограничений.
Я могу вычислить решение с помощью scipy.optimize.linprog(method='simplex'), но мне нужны скрытые цены (или возможности) затраты) ~100 неравенств.
Запуск проблемы оптимизации с использованием функции MILP Scipy. Я добираюсь до точки, когда появляется решающий отчет - либо через ограничение срока, либо решение. (см. ниже). В любом случае, когда появляется решающий отчет, я предполагаю, что...
Запуск проблемы оптимизации с использованием функции MILP Scipy. Я добираюсь до точки, когда появляется решающий отчет - либо через ограничение срока, либо решение. (см. ниже). В любом случае, когда появляется решающий отчет, я предполагаю, что...
Я запускаю проблему оптимизации, используя функцию MILP Scipy. Я добираюсь до точки, когда появляется решающий отчет, либо через ограничение срока, либо решение (см. Ниже). Когда появляется решающий отчет, я бы предположил, что функция вернется, и...