基于引力模型的用户任务匹配成功率优化研究
import pandas as pd
import numpy as np
from scipy.optimize import minimize
# 读取数据
data = pd.read_excel('user_task_data.xlsx')
# 计算用户与任务之间的距离
def calculate_distance(row):
    user_lat = row['user_latitude']
    user_lon = row['user_longitude']
    task_lat = row['task_latitude']
    task_lon = row['task_longitude']
    distance = np.sqrt((user_lat - task_lat)**2 + (user_lon - task_lon)**2)
    return distance
data['distance'] = data.apply(calculate_distance, axis=1)
# 筛选距离小于0.1的数据
filtered_data = data[data['distance'] < 0.1]
# 定义目标函数:最小化成功样本和失败样本引力子之差
def objective(x):
    k, m, n = x
    filtered_data['y'] = k * filtered_data['task_price'] * (filtered_data['user_task_limit']**m) / (filtered_data['distance']**n)
    success_y = filtered_data[filtered_data['task_status'] == 1]['y'].min()
    failure_y = filtered_data[filtered_data['task_status'] == 0]['y'].max()
    return success_y - failure_y
# 设置初始值
x0 = np.array([1, 1, 1])
# 优化求解最小引力子
res = minimize(objective, x0, method='Nelder-Mead')
# 获取最小引力子和对应的常量
min_y = res.fun
k, m, n = res.x
# 输出结果
print('最小引力子差值: ', min_y)
print('常量 k: ', k)
print('常量 m: ', m)
print('常量 n: ', n)
print('带常量的公式: y = {} * task_price * (user_task_limit^{}) / (distance^{})'.format(k, m, n))
原文地址: https://www.cveoy.top/t/topic/fAcT 著作权归作者所有。请勿转载和采集!