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)

DpythonProject3会员信息附件二:会员信息数据xlsx其中文件中‘商品GPS纬度’和‘商品GPS经度’两列的数据组成商品的位置信息‘会员GPS纬度’和‘会员GPS经度’两列数据组成会员的位置信息文件中‘预订任务限额’是每个会员对应的任务限额文件中‘任务标价’那列的数据代表商品的价格文件中‘任务执行情况’一列的数据分为0和1当任务执行情况为0时代表失败当任务执行情况为1时代表成功。设定‘

原文地址: https://www.cveoy.top/t/topic/ixNd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录