Как оптимизировать функцию с изменением параметров в Python? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть функция с различными параметрами вдоль суммирования.

Например, суммирование - это поиск общей цены заказа за месяц (скажем, 28 дней) и каждую неделю цена меняется.

и цена для каждого элемента p1 - цена для элемента 1 p2 - цена для элемента 2 p3 - цена для элемента 3

, и каждая цена меняется каждую неделю, поэтому она становится p1w1- цена товара 1 на неделю 1 p1w2 - цена товара 1 на неделю 2 p1w3 - цена товара 1 на неделю 3 p1w4 - цена товара 1 на неделю 4

p2w1 - цена товара 2 на неделю 1p2w2 - цена предмета 2 за неделю 2 ... и т. д. Вы понимаете, что ...

, поэтому я хотел бы оптимизировать количество покупок для каждого предмета каждую неделю, чтобы минимизировать стоимость. x1w1 - номер элемента 1 для недели 1 x1w1 - номер элемента 1 для недели 2 и т. д.

x2w1 - количество элементов 2 для недели 1 и т. д. ... вы поняли ..

итого, общая стоимость составляет

всего = (p1w1 * x1w1 + p1w2 * x1w2 + p1w3 * x1w3 + p1w4 * x1w4) + (p2w1 * x2w1 + p2w2 * x2w2 + p2w3 * x2w3 + p2w4 * x2w2 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 * x2w4 *+ ... и т.д ... вы поняли ..

моя проблема более сложна, чем эта, приведенное выше является лишь упрощением уравнения, но концепция та же

IЯ пытался изменить цену между неделями.

Например, измените цену недели 1 на 1000 долларов, а недели2 на 50 долларов, и я подумал, что возврат по оптимизации - это то же самое, что и для покупки. неделя 2, но не неделя 1. но нет никакой разницы, даже если цена поменялась, то есть 50 долларов в неделю 1 и 1000 долларов в неделю2. количество покупаемых предметов остается одинаковым для обоих случаев.

n = 3
def f(params):
    # Initialisation
    x=np.zeros(n)   
    y=np.zeros(n)
    z=np.zeros(n)
    priceA = [100,50,50]
    priceB = [50,1000,50]
    priceC = [50,25,500]

    x[0],x[1],x[2],y[0],y[1],y[2],z[0],z[1],z[2] = params    

    return  sum([priceA[i]*x[i] + priceB[i]*y[i] + priceC[i]*z[i] for i in range (0,n)])

Я ожидал, что значения x, y и z будут самыми низкими по самой высокой цене и самыми высокими по самой низкой цене.

приведенный выше код написан просто для упрощения.

...