基于引力模型的用户任务成功率预测与分析
import pandas as pd
import numpy as np
from scipy.optimize import minimize
# 读取数据
data = pd.read_excel('D:\\pythonProject3\\会员信息\\附件二:会员信息数据.xlsx')
# 计算会员和商品之间的距离
data['距离'] = np.sqrt((data['商品GPS纬度'] - data['会员GPS纬度'])**2 + (data['商品GPS经度'] - data['会员GPS经度'])**2)
# 定义目标函数:最小化成功任务的最小引力子
def objective(x):
k, m, n = x[0], x[1], x[2]
y = (k * data['任务标价'] * (data['预订任务限额']**m)) / (data['距离']**n)
return -np.min(y[data['任务执行情况'] == 1])
# 定义约束条件:成功任务的最小引力子要大于失败任务的最大引力子
def constraint(x):
k, m, n = x[0], x[1], x[2]
y = (k * data['任务标价'] * (data['预订任务限额']**m)) / (data['距离']**n)
return np.max(y[data['任务执行情况'] == 0]) - np.min(y[data['任务执行情况'] == 1])
# 初始化参数
x0 = [1, 1, 1] # 初始值
bounds = [(0, None), (0, None), (0, None)] # 参数范围
# 最小化目标函数
result = minimize(objective, x0, bounds=bounds, constraints={'type': 'ineq', 'fun': constraint})
# 输出结果
k, m, n = result.x[0], result.x[1], result.x[2]
formula = f'y = ({k:.4f}*q1*(q2**{m:.4f}))/r**{n:.4f}'
min_y = -result.fun
print('基于引力模型的任务成功率预测公式:', formula)
print('成功任务的最小引力子:', min_y)
原文地址: https://www.cveoy.top/t/topic/fAcx 著作权归作者所有。请勿转载和采集!