import pandas as pd
import math

# 读取Excel文件
data = pd.read_excel(r'D:\pythonProject3\会员信息\附件二:会员信息数据.xlsx')

# 提取所需列数据
com_lat = data['商品GPS纬度']
com_lon = data['商品GPS经度']
mem_lat = data['会员GPS纬度']
mem_lon = data['会员GPS经度']
price = data['任务标价']

# 计算商品和会员的距离
def calculate_distance(lat1, lon1, lat2, lon2):
    R = 6371  # 地球平均半径,单位为km
    lat1 = math.radians(lat1)
    lon1 = math.radians(lon1)
    lat2 = math.radians(lat2)
    lon2 = math.radians(lon2)
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = math.sin(dlat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    distance = R * c
    return distance

# 计算引力子
def calculate_gravity(price, distance, n):
    k = 1  # 常量k
    q1 = price  # 商品价格
    q2 = 1  # 会员价格,假设为1
    gravity = k * q1 * q2 / distance ** n
    return gravity

# 初始化最小引力子和常量n
min_gravity = float('inf')
min_n = 0

# 遍历数据,寻找最小引力子和常量n
for i in range(len(data)):
    distance = calculate_distance(com_lat[i], com_lon[i], mem_lat[i], mem_lon[i])
    gravity = calculate_gravity(price[i], distance, min_n)
    if gravity < min_gravity:
        min_gravity = gravity
        min_n = distance

# 输出带常量的公式
print(f'y = k * q1 * q2 / r^{min_n}')

# 注意:上述代码假设会员价格为1,若会员价格不为1,则需要修改calculate_gravity函数中的q2的取值。
Python计算商品对会员引力子:基于距离和价格的引力模型

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

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