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