import random as rm

# Функция для генерации процесса
def process (x, p, q, r, a, b, n):
    profit = 0 # Прибыль
    res = 0 # Остаток
    for i in range(0,n):
        y = rm.uniform(a,b) # Генерация случайного спроса
        profit += -q*(x-res) # Издержки, связанные с закупкой
        if (y < x):
            profit += p*y; # Доход от продажи
            profit += -r # Издержки на хранение (не зависят от величины остатка)
            res = x-y # Вычисление остатка
        else:
            profit += p*x; # Доход от продажи
            res = 0 # Остатка нет
    profit /= n;
    print("x = " + str(x) + ";" + (3-len(str(x)))*" " + "   Средняя прибыль: " +
          str(profit) + (21-len(str(profit)))*" " + "   Прибыль по формуле: " + 
          str(pfit(x)))

# Функция прибыли (по формуле) 
def pfit(x):
    if x <= a:  # Функция прибыли если запас меньше минимального спроса
        pi= (p-q) * x 
    elif x >= b:  # Функция прибыли если запас больше максимального спроса
        pi = (a+b)/2 * (p - q) - r
    else:       # Функция прибыли если запас лежит в отрезке [a, b]
        pi = ((q-p)*(x**2 + a**2) - 2*b*q*x - 2*r*x + 2*r*a + 2*b*p*x)/(2*(b-a))
    return pi

# Блок начальных данных
x = 0 # Дневной запас товара
p = 30 # Отпускная цена
q = 28 # Закупочная цена
r = 30 # Остаточная цена
a = 2 # Наименьший спрос
b = 10 # Наибольший спрос
n = 1000000 #Число испытаний
for x in range(-b,2*b+1): # Проверка прибыли для всех целых x
    process(x,p,q,r,a,b,n)

x_best = b + r/(q-p) # Поиск лучшего запаса продукции
print ('\n' + "Согласно формуле: x = " + str(x_best) +  ";   Прибыль:" + 
       str(pfit(x_best)))

        

             x = -10;   Средняя прибыль: -20.0                   Прибыль по формуле: -20 ,
             x = -9;    Средняя прибыль: -18.0                   Прибыль по формуле: -18 ,
             x = -8;    Средняя прибыль: -16.0                   Прибыль по формуле: -16 ,
             x = -7;    Средняя прибыль: -14.0                   Прибыль по формуле: -14 ,
             x = -6;    Средняя прибыль: -12.0                   Прибыль по формуле: -12 ,
             x = -5;    Средняя прибыль: -10.0                   Прибыль по формуле: -10 ,
             x = -4;    Средняя прибыль: -8.0                    Прибыль по формуле: -8 ,
             x = -3;    Средняя прибыль: -6.0                    Прибыль по формуле: -6 ,
             x = -2;    Средняя прибыль: -4.0                    Прибыль по формуле: -4 ,
             x = -1;    Средняя прибыль: -2.0                    Прибыль по формуле: -2 ,
             x = 0;     Средняя прибыль: 0.0                     Прибыль по формуле: 0 ,
             x = 1;     Средняя прибыль: 2.0                     Прибыль по формуле: 2 ,
             x = 2;     Средняя прибыль: 4.0                     Прибыль по формуле: 4 ,
             x = 3;     Средняя прибыль: 2.1083067945908853      Прибыль по формуле: 2.125 ,
             x = 4;     Средняя прибыль: 0.009384661916394763    Прибыль по формуле: 0.0 ,
             x = 5;     Средняя прибыль: -2.347312168744904      Прибыль по формуле: -2.375 ,
             x = 6;     Средняя прибыль: -5.02258944211615       Прибыль по формуле: -5.0 ,
             x = 7;     Средняя прибыль: -7.877780480741864      Прибыль по формуле: -7.875 ,
             x = 8;     Средняя прибыль: -11.000088569543985     Прибыль по формуле: -11.0 ,
             x = 9;     Средняя прибыль: -14.400737330349708     Прибыль по формуле: -14.375 ,
             x = 10;    Средняя прибыль: -18.00052731589199      Прибыль по формуле: -18.0 ,
             x = 11;    Средняя прибыль: -17.99641450349908      Прибыль по формуле: -18.0 ,
             x = 12;    Средняя прибыль: -17.999079110335835     Прибыль по формуле: -18.0 ,
             x = 13;    Средняя прибыль: -17.995438294015152     Прибыль по формуле: -18.0 ,
             x = 14;    Средняя прибыль: -18.0060712090063       Прибыль по формуле: -18.0 ,
             x = 15;    Средняя прибыль: -17.991132748310882     Прибыль по формуле: -18.0 ,
             x = 16;    Средняя прибыль: -18.004043559645893     Прибыль по формуле: -18.0 ,
             x = 17;    Средняя прибыль: -17.9968053592084       Прибыль по формуле: -18.0 ,
             x = 18;    Средняя прибыль: -17.998354908703945     Прибыль по формуле: -18.0 ,
             x = 19;    Средняя прибыль: -18.003893237312603     Прибыль по формуле: -18.0 ,
             x = 20;    Средняя прибыль: -17.995673015955557     Прибыль по формуле: -18.0 ,
              ,
             Согласно формуле: x = -5.0;   Прибыль:-10.0