Python计算商品对会员引力子:基于距离和价格的引力模型
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的取值。
原文地址: https://www.cveoy.top/t/topic/fz82 著作权归作者所有。请勿转载和采集!