import pandas as pd
import math
from scipy.optimize import minimize

# 读取Excel文件
df = pd.read_excel('data.xlsx')  # 请将 'data.xlsx' 替换为你的 Excel 文件路径

# 获取商品和会员的位置信息
goods_longitude = df['goods_longitude']
goods_latitude = df['goods_latitude']
member_longitude = df['member_longitude']
member_latitude = df['member_latitude']

# 获取任务限额和商品价格
task_quota = df['task_quota']
goods_price = df['goods_price']

# 计算两点之间的距离
def haversine(lat1, lon1, lat2, lon2):
    R = 6371  # 地球半径,单位为千米
    dlat = math.radians(lat2 - lat1)
    dlon = math.radians(lon2 - lon1)
    a = math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon / 2) * math.sin(dlon / 2)
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    distance = R * c
    return distance

# 计算商品与会员之间的距离
distance = []
for i in range(len(df)):
    dist = haversine(goods_latitude[i], goods_longitude[i], member_latitude[i], member_longitude[i])
    distance.append(dist)

# 定义目标函数
def objective(x):
    k, n, m = x
    y = (k * goods_price * (task_quota**m)) / (distance**n)
    return sum(y)

# 设置初始值
x0 = [1, 1, 1]

# 最小化求解
result = minimize(objective, x0)

# 提取最小引力子'y'和常量'k'、'n'和'm'
y_min = result.fun
k_min, n_min, m_min = result.x

# 输出带常量的公式
print(f'公式:y = ({k_min:.4f} * q1 * (q2^{m_min:.4f})) / (r^{n_min:.4f})')
print(f'最小引力子y的值:{y_min:.4f}')

代码说明:

  1. 导入必要的库:

    • pandas 用于读取和处理数据。
    • math 用于数学运算,例如计算弧度和三角函数。
    • scipy.optimize 用于最小化目标函数。
  2. 读取数据: 使用 pd.read_excel() 函数从 Excel 文件中读取数据,并将相关列数据存储到变量中。

  3. 计算距离: 使用 haversine() 函数计算每对商品和会员之间的距离,并将结果存储在 distance 列表中。

  4. 定义目标函数: objective() 函数定义了引力模型的公式,该公式将根据输入的常数 k, n, m 计算总引力值。

  5. 最小化目标函数: 使用 minimize() 函数找到使 objective() 函数返回值最小的常数 k, n, m

  6. 输出结果: 打印最终的引力模型公式和最小引力值。

注意事项:

  • 请确保你的 Excel 文件中包含名为 'goods_longitude', 'goods_latitude', 'member_longitude', 'member_latitude', 'task_quota' 和 'goods_price' 的列,并且数据类型正确。
  • 你可以根据需要修改初始值 x0
  • 本代码仅供参考,你可以根据实际情况修改和优化代码。
基于Python的引力模型:利用距离、价格和任务限额计算最小引力

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

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