亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何最小化與給定輸入分布的距離?

如何最小化與給定輸入分布的距離?

qq_遁去的一_1 2022-01-05 19:53:38
我有一個客戶列表,每個客戶都可以通過四種不同的方式“激活”:n= 1000df = pd.DataFrame(list(range(0,n)), columns = ['Customer_ID'])df['A'] = np.random.randint(2, size=n)df['B'] = np.random.randint(2, size=n)df['C'] = np.random.randint(2, size=n)每個客戶都可以在“A”或“B”或“C”上激活,并且僅當與激活類型相關的布爾值等于 1 時。在輸入中,我有最終激活的計數。es:Target_A = 500Target_B = 250Target_C = 250代碼中的隨機值是優化器的輸入,代表以這種方式激活客戶端的可能性。我如何才能僅將客戶與其中之一聯系起來以尊重最終目標?如何最小化實際激活計數與輸入數據之間的距離?
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

你有任何經過測試的例子嗎?我認為這可能有效但不確定:


import pandas as pd

import numpy as np

from pulp import LpProblem, LpVariable, LpMinimize, LpInteger, lpSum, value


prob = LpProblem("problem", LpMinimize)



n= 1000

df = pd.DataFrame(list(range(0,n)), columns = ['Customer_ID'])

df['A'] = np.random.randint(2, size=n)

df['B'] = np.random.randint(2, size=n)

df['C'] = np.random.randint(2, size=n)


Target_A = 500

Target_B = 250

Target_C = 250



A = LpVariable.dicts("A", range(0, n), lowBound=0, upBound=1, cat='Boolean')

B = LpVariable.dicts("B", range(0, n), lowBound=0, upBound=1, cat='Boolean')

C = LpVariable.dicts("C", range(0, n), lowBound=0, upBound=1, cat='Boolean')


O1 = LpVariable("O1", cat='Integer')

O2 = LpVariable("O2", cat='Integer')

O3 = LpVariable("O3", cat='Integer')


#objective

prob += O1 + O2 + O3


#constraints

prob += O1 >= Target_A - lpSum(A)

prob += O1 >= lpSum(A) - Target_A

prob += O2 >= Target_B - lpSum(B)

prob += O2 >= lpSum(B) - Target_B

prob += O3 >= Target_C - lpSum(C)

prob += O3 >= lpSum(C) - Target_C


for idx in range(0, n):

    prob += A[idx] + B[idx] + C[idx] <= 1 #cant activate more than 1

    prob += A[idx] <= df['A'][idx] #cant activate if 0

    prob += B[idx] <= df['B'][idx] 

    prob += C[idx] <= df['C'][idx] 


prob.solve()    


print("difference:", prob.objective.value())


查看完整回答
反對 回復 2022-01-05
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號