DpythonProject3会员信息附件二:会员信息数据xlsx其中文件中‘商品GPS纬度’和‘商品GPS经度’两列的数据组成商品的位置信息‘会员GPS纬度’和‘会员GPS经度’两列数据组成会员的位置信息文件中‘预订任务限额’是每个会员对应的任务限额文件中‘任务标价’那列的数据代表商品的价格文件中‘任务执行情况’一列的数据分为0和1当任务执行情况为0时代表失败当任务执行情况为1时代表成功。设定‘
import pandas as pd import numpy as np from scipy.optimize import minimize
读取Excel文件
df = pd.read_excel(r'D:\pythonProject3\会员信息\附件二:会员信息数据.xlsx')
提取所需列数据
com_lat = df['商品GPS纬度'] com_lon = df['商品GPS经度'] mem_lat = df['会员GPS纬度'] mem_lon = df['会员GPS经度'] quota = df['预订任务限额'] price = df['任务标价'] status = df['任务执行情况']
定义引力子公式
def gravity_function(x, com_lat, com_lon, mem_lat, mem_lon): k, n, m = x[0], x[1], x[2] y = (k * price * (quota ** m)) / ((np.sqrt((com_lat - mem_lat) ** 2 + (com_lon - mem_lon) ** 2)) ** n) return y
定义目标函数,使成功数据中的最小引力子大于失败数据中的最大引力子
def objective(x): success_data = gravity_function(x, com_lat[status == 1], com_lon[status == 1], mem_lat[status == 1], mem_lon[status == 1]) failure_data = gravity_function(x, com_lat[status == 0], com_lon[status == 0], mem_lat[status == 0], mem_lon[status == 0]) return np.min(success_data) - np.max(failure_data)
初始猜测值
x0 = np.array([1, 1, 1])
最小化目标函数,求解最优参数
result = minimize(objective, x0)
输出最优参数
k_optimal, n_optimal, m_optimal = result.x[0], result.x[1], result.x[2]
输出带常量的公式
formula = f"y = ({k_optimal} * q1 * (q2^{m_optimal})) / (r^{n_optimal})" print(formula)
原文地址: https://www.cveoy.top/t/topic/ixNd 著作权归作者所有。请勿转载和采集!