import pandas as pd
from scipy.optimize import minimize

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

# 提取所需列数据
price = data['任务标价']
limit = data['预订任务限额']
distance = data.apply(lambda row: ((row['商品GPS纬度'] - row['会员GPS纬度'])**2 + (row['商品GPS经度'] - row['会员GPS经度'])**2)**0.5, axis=1)

# 定义优化函数,即最小化目标函数
def objective(x):
    k, n, m = x
    return sum((k * price * (limit**m)) / (distance**n))

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

# 利用scipy库的minimize函数寻找最小化目标函数的参数
result = minimize(objective, x0, bounds=[(0, None), (0, None), (0, None)])  # 限定参数大于0

# 输出最小引力子的值和对应的参数值
y_min = result.fun
k_min, n_min, m_min = result.x

print('最小引力子:', y_min)
print('常量k:', k_min)
print('常量n:', n_min)
print('常量m:', m_min)

# 输出带常量的公式
formula = f'y = ({k_min:.4f} * q1 * (q2^{m_min:.4f})) / (r^{n_min:.4f})'
print('公式:', formula)

代码说明:

  1. 导入库: 导入pandas库用于数据处理,scipy.optimize库中的minimize函数用于寻找函数最小值。
  2. 读取数据: 使用pandas读取Excel文件中的数据,并提取需要的列数据:商品价格、任务限额、商品位置、会员位置。
  3. 计算距离: 根据商品和会员的经纬度信息,计算它们之间的距离。
  4. 定义目标函数: 定义引力模型的目标函数,即最小化的目标。
  5. 设置初始猜测值: 为优化算法设置初始猜测值。
  6. 优化参数: 使用minimize函数寻找使目标函数最小的参数值,并限定参数值大于0。
  7. 输出结果: 输出最小引力子以及对应的参数值,并输出带常量的公式。

注意:

  • 这段代码假设Excel文件中的数据已经按照列名进行了正确的命名,并且数据的格式是正确的。
  • 可以根据实际情况调整初始猜测值和参数范围,以获得更准确的结果。
  • 引力模型只是一个简化的模型,实际情况可能更加复杂,需要根据具体情况进行调整和优化。

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

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