#dd-cell import pandas as pd #dd-cell # Get all data rangesAsSet = inputs['rangesAsSet'] ranges = rangesAsSet.set_index(['customer']) rawData = inputs['rawData'] customers = rawData['customer'].unique().tolist() priceIndices = rawData['priceIndex'].unique().tolist() rawData = rawData.set_index(['customer', 'priceIndex']) weights = inputs['weights'] weights = weights.set_index(['name']) parameters = inputs['parameters'] parameters = parameters.set_index(['name']) volumeBound = parameters.value["minVolume"]; maxAvgPriceIncrease = parameters.value["maxAvgIncrease"]; minRevenue = parameters.value["minRevenue"]; isVolumeCstActive = parameters.value["isVolumeCstActive"]; isAvgPriceIncActive = parameters.value["isAvgPriceIncActive"]; isRevCstActive = parameters.value["isRevCstActive"]; isPreviousPriceApplied = parameters.value["isPreviousPriceApplied"]; revenueWeight = weights.value["revenue"]; volumeWeight = weights.value["volume"]; avgIncWeight = weights.value["avgInc"]; priceIndiceSubset = [ pi for pi in priceIndices if priceIndices.index(pi)= ranges.lowerBound[c], 'ctLowerPrice') mdl.add_constraint( priceApplied[c] <= ranges.upperBound[c], 'ctUpperPrice') if isVolumeCstActive == 1: mdl.add_constraint( volume>=volumeBound, 'ctVolume' ) if isAvgPriceIncActive == 1: mdl.add_constraint( averagePriceIncrease <= maxAvgPriceIncrease, 'ctAveragePriceIncrease') if isRevCstActive == 1: mdl.add_constraint(revenue >= minRevenue, 'ctRevenueMin') mdl.print_information() #dd-cell # solve ok = mdl.solve() mdl.print_solution() #dd-cell # Some post processing result = None if isPreviousPriceApplied==0: result = [ [c,volumeIfPrevPriceAppliedPerCust[c],previousPrice[c],previousPrice[c], 0] for c in customers ] else: result = [ [c,volumePerCust[c].solution_value,priceApplied[c].solution_value,previousPrice[c], priceApplied[c].solution_value - previousPrice[c]] for c in customers ] outputs['result'] = pd.DataFrame(data=result, columns=['customer', 'volume', 'price', 'previousPrice', 'delta']) outputs['objective'] = pd.DataFrame(data=[[revenue.solution_value,volume.solution_value,averagePriceIncrease.solution_value]], columns=['Revenue','Volume','AvgPriceIncrease']) #dd-cell