五一校赛

Lingo

Lingo是一种用于线性规划、整数规划、非线性规划、网络优化等问题求解的商业软件。它提供了一个直观的用户界面,使用户可以轻松地建模和解决各种优化问题。Lingo使用了一些先进的优化算法来寻找最优解,包括线性规划中常用的单纯形法以及整数规划中的分支定界法

这篇文章对Lingo的介绍还不错

Lingo是Linear Interaction and General Optimizer的缩写,中文名称为“交互式线性和通用优化求解器”

还有两款很知名的优化问题求解工具,可以很快的求解大规模的优化问题,尤其整数规划,即Gurobi和Cplex,通过教育邮箱(edu.cn)可以从官网免费下载

  • LINGO根据“MAX=”或“MIN=”寻找目标函数,而除注释和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要
  • 如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负

评价类

熵权法

熵权法是一种多指标权重确定方法,它利用信息熵的概念来衡量指标之间的不确定性和信息量,进而确定各指标的权重。熵权法的基本思想是,对于一个给定的评价指标体系,如果某个指标的信息熵越大,说明该指标提供的信息量越多,其对决策的影响程度也越大,因此其权重应该越高

以下是熵权法的具体步骤:

  1. 数据标准化:首先,将评价指标的原始数据进行标准化处理,将其转化为区间在[0, 1]之间的无量纲数据,以消除不同量纲和量纲差异对结果的影响
  2. 计算信息熵:对于每个指标,计算其信息熵
  3. 计算权重:根据信息熵计算各指标的权重
  4. 归一化处理:对得到的权重进行归一化处理,使得各指标的权重之和为1

熵权法的优点在于能够充分考虑各指标之间的相关性和重要性,适用于评价指标较多、相互关联的情况。然而,熵权法也有一些局限性,比如对于数据的敏感性较强,需要足够的样本数据来计算指标的信息熵。此外,该方法也可能受到指标选择和权重计算方法的影响

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import pandas as pd
import numpy as np

# 读取Excel文件
df = pd.read_excel("B题-附件2.xlsx")

# 标准化函数
def normalize(data):
return (data - data.mean()) / data.std()

# 归一化函数
def min_max_normalize(data):
return (data - data.min()) / (data.max() - data.min())

# 计算每个指标的熵值
def entropy(x):
p = x / float(x.sum())
return -(p * np.log(p)).sum()

# 计算每个指标的权重
def calculate_weights(data):
standardized_data = normalize(data)
normalized_data = min_max_normalize(standardized_data)
entropy_values = normalized_data.apply(entropy)
weights = 1 - entropy_values / np.log(len(data))
return weights

# 计算每个指标的权重
weights = calculate_weights(df.iloc[:, 2:])
weights_normalized = weights / weights.sum()

# 将权重导出到Excel表格
weights_df = pd.DataFrame(weights_normalized, index=df.columns[2:], columns=["Weight"])
weights_df.to_excel("问题一各指标权重.xlsx")

蒙特卡洛

蒙特卡洛方法(Monte Carlo Method)是一种通过随机抽样来获得数值解的数值计算方法。它的基本思想是通过进行大量的随机实验来估计一个问题的解。这种方法可以用来解决各种复杂的数学、物理、统计等领域的问题,特别是那些难以用解析方法解决的问题。常见的应用包括计算积分、求解微分方程、优化问题等。

蒙特卡洛方法的核心在于通过随机抽样来近似地表示问题的解,然后利用大量的样本数据进行统计分析,从而得到对问题解的估计。它的优势在于可以处理高维、复杂的问题,并且通常比传统的解析方法更灵活、更适用于实际情况。

蒙特卡洛方法的名字来源于摩纳哥的蒙特卡洛赌场,因为在20世纪40年代,该方法的创始人之一Stanislaw Ulam就是在赌场中想到这个方法的

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import random
def monte_carlo_pi(num_samples):
inside_circle = 0

for _ in range(num_samples):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)

if x**2 + y**2 <= 1:
inside_circle += 1

return (inside_circle / num_samples) * 4

# 设置抽样点数量
num_samples = 1000000

estimated_pi = monte_carlo_pi(num_samples)
print("Estimated value of π using Monte Carlo method:", estimated_pi)

数据处理类

归一化

归一化是一种常见的数据预处理方法,旨在将数据按比例缩放到一个特定的范围内,以消除不同特征之间的量纲差异或数据尺度差异。这有助于提高模型的收敛速度、减少过拟合,并提高模型的性能和泛化能力。

CSV文件

CSV(Comma-Separated Values,逗号分隔值)用于存储表格数据。CSV 文件中的每一行都代表表格中的一行记录,而每个字段(列)则由逗号(或其他分隔符)来分隔。CSV 文件是一种简单、轻量级、易于处理的文本文件格式,常被用于数据交换、数据导入导出以及数据存储

以下是 CSV 文件的一些特点和用法:

  1. 简单易懂:CSV 文件是纯文本格式,易于理解和编辑。它只包含了数据本身,没有额外的格式或样式信息,相对于其他格式来说更简单
  2. 适用性广泛:CSV 文件可以被几乎所有的文本编辑器、电子表格软件和数据库管理系统所支持。因此,它是一种通用的数据交换格式,可用于**在不同的应用程序之间进行数据交换
  3. 跨平台兼容性:CSV 文件不依赖于特定的操作系统或软件,因此具有很好的跨平台兼容性。无论是在Windows、Mac还是Linux系统下,CSV 文件都可以方便地使用
  4. 数据存储:由于其简单性和易用性,CSV 文件常被用来存储小型数据集,如配置文件、日志文件、数据库导出等。它也可以用于存储大型数据集,但在某些情况下可能会受到性能和存储效率的限制

用记事本打开csv文件是没有问题的,打开xlsx文件就是乱码(Excel 文件是二进制文件,其中包含了工作表、图表、宏等丰富的数据和格式信息)