【1stOpt 5.0全攻略】:精通中文版1stOpt的终极指南
发布时间: 2024-12-17 22:44:06 阅读量: 7 订阅数: 7 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![【1stOpt 5.0全攻略】:精通中文版1stOpt的终极指南](https://i0.hdslb.com/bfs/article/4803efad51a7e27c697fb45b06e7f4d02a27132f.jpg)
参考资源链接:[1stOpt 5.0中文使用手册:全面解析与功能指南](https://wenku.csdn.net/doc/n57wf9bj9d?spm=1055.2635.3001.10343)
# 1. 1stOpt 5.0概述
## 1.1 1stOpt 5.0简介
1stOpt 是一款强大的通用优化软件,被广泛应用于工程、经济、生物信息等多个领域。其最新版本5.0在前版本的基础上,不仅进一步完善了用户界面,优化了操作流程,还新增了多种先进的优化算法,为用户提供了更为便捷和高效的优化解决方案。
## 1.2 主要功能
1stOpt 5.0的主要功能包括非线性规划问题求解、参数估计与优化、程序扩展与脚本编写等。它支持多种优化算法,如遗传算法、模拟退火算法、粒子群优化算法等,满足不同用户的多样化需求。
## 1.3 应用优势
相比于其他优化软件,1stOpt 5.0具有操作简单、功能强大、兼容性好等优势。无论你是优化问题的研究人员,还是实际应用中的工程师,1stOpt 5.0都能提供强大的技术支持和解决方案。
# 2. 1stOpt 5.0基础操作指南
## 2.1 用户界面与基本设置
### 2.1.1 界面布局解读
1stOpt 5.0的用户界面设计为直观易用,旨在帮助用户快速熟悉操作流程。界面布局分为几个主要区域:菜单栏、工具栏、工作区、状态栏和视图窗格。菜单栏提供了文件操作、编辑、视图设置等基础功能。工具栏则是对常用功能的快捷方式,例如新建模型、求解模型、保存工程等。工作区是进行模型构建和分析的主要场所,用户在此输入数学表达式、约束条件和参数设置。状态栏显示当前软件状态信息,如求解进度和提示信息。视图窗格可以显示数据图表、变量值等辅助信息,增强用户体验。
### 2.1.2 首次使用的基本设置
首次使用1stOpt 5.0时,建议进行一些基本设置以适应个人操作习惯:
- **界面语言设置**:在菜单栏选择"Options" -> "Language",选择合适的语言。
- **工作区布局**:可以通过拖动工具栏和视图窗格来调整布局,满足个性化需求。
- **快捷键配置**:用户可以在"Options" -> "Customize Keyboard..."中自定义快捷键。
- **模板选择**:选择"File" -> "New",可选择内置模板快速开始模型构建。
## 2.2 建模与求解
### 2.2.1 模型的构建方法
1stOpt 5.0支持多种模型构建方式,包括直接在工作区输入数学表达式、使用图形化界面拖拽组件、以及导入外部数学模型文件。构建过程中需要注意以下几点:
- **表达式准确性**:确保数学表达式无语法错误,正确表示问题需求。
- **约束条件设置**:适当使用约束条件来缩小解空间,提高求解效率。
- **参数定义**:明确模型中的参数,包括变量参数和常量参数,并设定合理范围。
示例代码块展示如何在工作区输入一个简单的线性规划模型:
```mathematica
(* 线性规划模型 *)
Maximize[{c . x, a . x <= b, x >= 0}, x]
```
解释:上述代码表示一个目标函数 `c . x`(最大化),以及约束条件 `a . x <= b` 和变量的非负约束 `x >= 0`。
### 2.2.2 求解器的选择与使用
1stOpt 5.0内置多种求解器,覆盖线性规划、非线性规划、整数规划等多种模型类型。用户应根据实际问题选择合适的求解器:
- **选择求解器**:在"Tools" -> "Select Solver..."中根据模型类型选择相应的求解器。
- **求解器参数设置**:不同的求解器有不同的参数设置,如容差、迭代次数等,在"Options"中进行详细配置。
- **求解与分析结果**:点击"Run"按钮开始求解,并通过"Solution"窗口查看结果和分析报告。
代码块展示使用内置求解器的示例:
```python
# 1stOpt内置求解器API调用示例
from firstopt import Solver
problem = Solver()
problem.set_objective('Maximize', 'c . x')
problem.add_constraint('a . x <= b')
problem.set_variable_bounds('x', 0, None)
problem.solve()
```
解释:上述代码通过调用1stOpt的API来设置目标函数和约束条件,并指定变量的边界条件。最后调用`solve()`方法开始求解。
## 2.3 数据管理与分析
### 2.3.1 数据输入输出技巧
数据输入输出是进行模型求解前的重要步骤。1stOpt 5.0支持多种数据格式,如CSV、Excel、文本文件等:
- **数据输入**:选择"File" -> "Import Data",选择相应文件类型并导入数据。
- **数据输出**:求解完成后,选择"File" -> "Export Data"或"Export Solution"将数据输出。
### 2.3.2 数据处理与分析方法
数据处理通常包括数据清洗、格式转换等,分析方法则依赖于问题的性质。1stOpt 5.0提供一些基本的数据处理功能,更复杂的数据分析可能需要结合其他工具或脚本:
- **数据预处理**:使用内置的"Data Manager"功能进行数据清洗,处理缺失值、异常值等。
- **数据分析**:应用统计分析方法,如描述性统计、趋势分析等,帮助理解数据特征。
```python
# 示例代码:使用内置函数进行数据预处理
import pandas as pd
# 加载数据
df = pd.read_csv("data.csv")
# 数据清洗示例:移除缺失值
df_cleaned = df.dropna()
# 保存清洗后的数据
df_cleaned.to_csv("data_cleaned.csv", index=False)
```
解释:上述代码使用Python的`pandas`库来处理数据,首先加载CSV文件,然后移除含有缺失值的行,并将清洗后的数据保存到新文件。这种数据处理流程在1stOpt中可以自动化完成。
# 3. 1stOpt 5.0高级功能解析
在上一章节中,我们讨论了1stOpt 5.0的基础操作指南,涵盖了用户界面的基本设置、建模与求解、以及数据管理与分析。这些基础知识为用户提供了入门级的技能,使他们能够开始使用该软件进行基本的数学建模和求解任务。随着用户技能的提升和对软件功能的深入理解,他们将开始寻求更高级的功能来解决更复杂的问题。因此,本章节将深入探讨1stOpt 5.0的高级功能,包括非线性规划问题求解、参数估计与优化、以及程序扩展与脚本编写。
## 3.1 非线性规划问题求解
非线性规划是数学优化中的一个关键分支,它涉及在满足一定约束条件的情况下,找到一组变量的最佳值,以最小化或最大化目标函数。1stOpt 5.0在这一领域提供了多种高级功能,旨在帮助用户更精确地定义和求解复杂的非线性规划问题。
### 3.1.1 理论基础与应用案例
在非线性规划中,目标函数或约束条件可能包含变量的非线性表达式。1stOpt 5.0利用其强大的算法库支持各种非线性规划模型的构建和求解。理论基础包括但不限于:
- 梯度优化方法
- 非线性最小二乘
- 遗传算法
- 模拟退火
**应用案例解析**:例如,工程师希望优化飞机的空气动力学设计,以减少阻力并提高燃油效率。在这种情况下,目标函数可能与空气流过飞机表面的方式有关,而约束条件可能与材料强度、制造成本和飞行安全性相关。1stOpt 5.0允许用户定义这种复杂的目标函数和约束,并运用适当的算法来找到最优设计参数。
### 3.1.2 高级算法的选择与应用
1stOpt 5.0集成了多种高级算法,用户可以根据问题的特性选择合适的算法进行求解。以下是算法选择与应用的流程:
- **算法选择:** 用户首先需要根据问题的特性(如连续性、可微性、约束类型等)来选择合适的算法。例如,对于具有复杂约束的问题,遗传算法和模拟退火算法可能是较好的选择。
- **参数设置:** 不同算法都有自己的参数,如种群大小、交叉率、变异率等。用户需要根据实际情况调整这些参数以获得最优的求解效果。
- **求解与分析:** 使用选定的算法进行求解,并通过分析输出结果来验证模型的正确性。如果结果不理想,可能需要重新调整算法参数或选择不同的求解策略。
**代码示例:**
```matlab
% 使用1stOpt内置的遗传算法进行非线性规划问题求解
function result = nonlinear_optimization()
% 定义目标函数
objFun = @(x) sum(x.^2);
% 初始猜测
x0 = [-1.2, 1.0];
% 无约束的遗传算法求解
options = 1stOpt.options;
options.Algorithm = 'Genetic'; % 选择遗传算法
options.PopulationSize = 50; % 设置种群大小
options.MaxGenerations = 100; % 设置最大迭代次数
options.TolFun = 1e-6; % 设置函数容忍度
% 求解非线性优化问题
[result, info] = fminsearch(objFun, x0, options);
end
```
在此代码块中,我们定义了一个简单的非线性优化问题,并使用`fminsearch`函数和遗传算法来求解。请注意,`1stOpt.options`需要根据实际问题进行调整。
## 3.2 参数估计与优化
参数估计是数学建模中的一个重要环节,它涉及到从给定数据中估计出模型参数的最佳值。这在许多科学和工程领域中非常常见,如物理、化学、生物统计学以及经济学。
### 3.2.1 参数估计的理论与技术
参数估计的目的是找到一组参数,使得某个理论模型能够最好地匹配实验或观察数据。常见的参数估计技术包括:
- 最小二乘法
- 极大似然估计
- 贝叶斯估计
**技术应用**:在1stOpt 5.0中,参数估计可以通过内置的优化算法来实现。用户需要定义一个误差函数(如平方和误差),然后利用优化算法来最小化这个函数。
### 3.2.2 优化问题的实战应用
在实际应用中,参数估计通常与优化问题结合。例如,在化学反应动力学中,我们可能需要估计反应速率常数,以便模拟反应过程。以下是参数估计的应用流程:
- **模型定义:** 明确模型的形式,包括因变量、自变量、参数以及误差函数。
- **数据准备:** 收集必要的实验数据或观察数据。
- **优化求解:** 选择合适的优化算法,并运行求解过程。
- **结果验证:** 通过比较模型预测和实际数据来验证参数估计的有效性。
**代码示例:**
```matlab
% 使用1stOpt进行参数估计的示例
function estimate_parameters()
% 假设的真实参数值
trueParams = [1.5, 2.5];
% 模拟数据生成
x = linspace(0, 1, 20);
y = trueParams(1) * exp(-trueParams(2) * x) + randn(size(x)) * 0.1;
% 定义误差函数(目标函数)
error_function = @(params) sum((params(1) * exp(-params(2) * x) - y).^2);
% 参数的初始猜测
initial_guess = [1, 1];
% 使用优化算法求解参数
options = optimset('Display', 'off', 'TolX', 1e-6);
[estimatedParams, resnorm] = fminsearch(error_function, initial_guess, options);
% 输出估计的参数
disp('Estimated parameters:');
disp(estimatedParams);
end
```
在这个代码示例中,我们首先模拟了一些数据,然后定义了一个误差函数来衡量数据与模型预测值之间的差异。我们使用`fminsearch`函数和初始猜测值来估计模型参数。
## 3.3 程序扩展与脚本编写
随着用户对1stOpt 5.0功能需求的增加,简单的图形用户界面操作可能不足以完成更复杂和个性化的任务。为了克服这一限制,1stOpt 5.0提供了一种内置脚本语言,允许用户编写自定义函数和模块来扩展软件功能。
### 3.3.1 内置脚本语言解析
1stOpt 5.0的内置脚本语言提供了编程语言的基本结构和控制语句。用户可以通过编写脚本来自动化复杂的建模任务,实现参数的批量处理,甚至可以将多个求解过程串联起来。
**脚本编写基础**:脚本语言的语法非常类似于其他高级编程语言,如C语言或MATLAB。用户可以定义变量、编写循环和条件语句,并调用1stOpt 5.0的内置函数。
### 3.3.2 自定义函数与模块开发
通过自定义函数,用户可以封装重复使用的代码块,简化建模过程并提高生产效率。而模块开发则允许用户创建可以被其他脚本调用的独立单元。
**模块化编程实践**:开发模块需要用户定义模块接口和功能,然后在其他脚本或命令行中调用。1stOpt 5.0提供了模块化编程的支持,用户可以在内置的脚本编辑器中编写和测试代码。
**代码示例:**
```matlab
% 自定义函数示例:一个简单的非线性函数求解器
function result = custom_nonlinear_solver()
% 定义目标函数
objFun = @(x) sum(x.^2);
% 初始猜测
x0 = [0, 0];
% 求解非线性优化问题
result = fminsearch(objFun, x0);
end
```
在此代码块中,我们定义了一个自定义函数`custom_nonlinear_solver`,它可以被用来求解特定的非线性优化问题。这个函数封装了求解过程,使得用户可以在其他地方重复调用它。
通过上述章节,我们详细介绍了1stOpt 5.0的高级功能。下一章节将通过具体的实践应用案例分析,进一步展示这些高级功能在实际问题中的运用。
# 4. 1stOpt 5.0实践应用案例分析
## 4.1 工程问题优化实例
### 4.1.1 案例选择与问题描述
在工程领域中,优化问题无处不在,比如如何最小化材料成本、最大化产品性能或确保设计的可靠性等。在本节中,我们将探讨一个典型的工程问题优化实例,并展示1stOpt 5.0是如何被应用来解决这个问题的。我们选择一个结构设计问题作为案例,目标是最小化结构的质量,同时确保其承载能力符合安全标准。
首先,问题可以被形式化为一个多目标优化问题,其中包含多个设计变量(如材料的尺寸和类型),以及一系列约束条件(例如强度、稳定性、成本等限制)。在设计过程中,工程师需要在满足这些约束的前提下,找到最佳的设计方案。
### 4.1.2 1stOpt在工程中的应用方法
使用1stOpt 5.0进行工程优化的过程通常涉及以下步骤:
1. **模型构建**:首先,将工程问题转化为1stOpt可以识别和处理的数学模型。
2. **定义目标函数和约束**:根据设计需求,确定目标函数(如质量、成本或性能指标)并列出所有相关的约束条件。
3. **选择求解器**:在1stOpt中选择合适的算法或求解器来求解模型。例如,对于非线性问题,可以选择内置的梯度下降法、遗传算法或粒子群优化等方法。
4. **参数设置与求解**:配置算法参数(如迭代次数、收敛条件等),然后运行求解器,进行问题求解。
5. **结果分析与验证**:分析1stOpt生成的结果,验证其是否满足所有设计要求,并进行必要的调整和优化。
6. **模型优化与迭代**:根据分析结果进行模型的修改和优化,可能需要反复迭代以找到最优解。
接下来,我们将详细讨论如何使用1stOpt 5.0来构建和求解这类工程问题。
#### 表格:工程优化问题的求解要素
| 要素 | 描述 |
| --- | --- |
| 设计变量 | 结构的尺寸、材料类型等 |
| 目标函数 | 结构的最小化质量 |
| 约束条件 | 载荷能力、稳定性、成本限制 |
| 选择的求解器 | 遗传算法(GA) |
| 参数设置 | 种群大小、交叉率、变异率 |
| 结果分析 | 是否满足所有工程要求 |
### 4.1.3 代码块与逻辑分析
下面是一个简化的示例代码块,演示如何使用1stOpt 5.0的内置脚本语言来构建和求解上述工程优化问题。
```1stOpt
Model:
Minimize mass = 0.1*x1 + 0.3*x2 + 0.02*x3
Subject to:
500 - 10*x1 + 5*x2 <= 0
300 - 8*x1 + 2*x2 + x3 <= 0
x1 <= 100
x2 <= 200
x3 >= 10
x1, x2, x3 > 0
```
在上述脚本中,我们定义了一个包含三个设计变量`x1`, `x2`, `x3`的优化模型。目标是最小化结构的质量(即最小化目标函数)。我们还设定了五个约束条件,其中包括两个不等式约束、三个边界约束。该问题的求解使用了1stOpt的内置全局优化算法。
代码执行的逻辑是首先定义了一个最小化问题,然后输入了目标函数和约束条件。该模型使用了线性及非线性约束,而1stOpt能够处理这类混合约束问题。求解过程将自动调用所选的求解器(在这个例子中没有明确指定,因此将使用默认算法),并返回满足所有约束条件的最优解。
### 4.1.4 实际应用操作步骤
1. **打开1stOpt软件**:运行1stOpt 5.0,进入其主界面。
2. **输入模型**:根据实际工程问题,构建和输入上述模型。
3. **设置求解器**:在软件中选择适当的求解器,对于该问题,可以选用遗传算法。
4. **调整参数**:根据模型的复杂度和求解器特点,调整算法参数。
5. **运行求解**:点击运行按钮,启动优化过程。
6. **分析结果**:查看输出结果,检查是否符合工程标准。
以上步骤完成后,你将获得一个经过优化的工程设计,该设计在满足所有工程要求的同时,将结构的质量降至最低。通过这个实例,我们可以看到1stOpt在解决实际工程问题中的强大功能和便捷性。
# 5. 1stOpt 5.0进阶技巧与优化
## 5.1 算法调优与性能评估
### 算法效率的提升方法
在处理复杂优化问题时,算法效率成为决定求解质量与速度的关键因素。提高算法效率通常涉及以下几个方面:
- **算法选择**:针对不同问题选择合适的算法是至关重要的。1stOpt 提供多种优化算法,如遗传算法、模拟退火算法、粒子群优化等。理解各种算法的特点和适用场景是提升效率的第一步。
- **参数调整**:算法的参数设置直接影响求解过程和结果。1stOpt 允许用户精细调整算法参数,如种群规模、交叉概率、变异率等,以获得更优的求解性能。
- **并行计算**:采用并行计算技术可以显著提高算法运行速度,尤其是对于计算密集型问题。1stOpt 支持多线程和分布式计算,可以在多核处理器上并行执行,提高计算效率。
### 程序性能的评估与优化
评估程序性能是进一步优化的前提。在1stOpt中,性能评估通常包括以下几个方面:
- **时间分析**:监控算法运行过程中的时间消耗,识别瓶颈所在。1stOpt提供运行时间统计功能,便于用户了解各阶段的耗时。
- **资源监控**:观察算法运行时CPU、内存等资源的使用情况。合理分配资源可提升效率,避免资源浪费。
- **收敛性评估**:评估算法的收敛速度和收敛质量。一个高效的算法应当在有限迭代次数内找到满意的解或证明问题无解。
- **结果稳定性**:多次运行算法,检查结果的一致性。稳定性好的算法能够提供可信赖的解决方案。
下面通过一个示例,展示如何在1stOpt中进行性能评估:
```mermaid
graph TD;
A[开始评估] --> B[运行测试问题];
B --> C{是否收敛};
C -->|是| D[记录收敛信息];
C -->|否| E[调整参数];
D --> F[分析时间与资源消耗];
E --> B;
F --> G[输出性能报告];
```
在评估过程中,用户可以通过以下代码示例监控并记录关键的性能指标:
```python
import time
# 测试1stOpt算法性能
def test_performance(model):
start_time = time.time() # 开始时间
solution = model.solve() # 求解模型
end_time = time.time() # 结束时间
elapsed_time = end_time - start_time # 计算运行时间
print(f"Algorithm took {elapsed_time} seconds to complete.")
if solution:
print("Solution found:", solution)
else:
print("No solution found.")
return solution
# 定义模型并运行测试
model = define_your_optimization_model()
test_performance(model)
```
### 代码逻辑解读
在上述代码块中,我们定义了一个 `test_performance` 函数,该函数接受一个优化模型 `model` 作为参数。首先记录开始运行时间,然后调用模型的求解函数 `solve()`,最后记录结束时间并计算总运行时间。通过打印 `elapsed_time`,我们可以了解算法的运行效率。如果求解成功,则打印出解决方案;否则,表示未找到解。
### 参数说明
- `model`:这是一个已经定义好的优化模型对象,包含了模型的所有信息,包括目标函数、约束条件等。
- `solve()`:这是模型对象提供的一个方法,用于开始求解过程。
- `time.time()`:这是一个Python标准库函数,返回当前时间的时间戳(秒数),用于计算程序运行时间。
通过实际应用此类分析和调整方法,用户能够对1stOpt的性能进行深入理解和有效提升。
# 6. 1stOpt 5.0与其他软件的集成
## 6.1 与Excel、MATLAB的交互
1stOpt 5.0不仅可以独立使用,还可以与流行的工程和数据分析工具如Excel和MATLAB进行有效的集成。这种集成大大扩展了1stOpt的应用范围,允许用户利用其他软件的特有功能和数据处理能力。
### 6.1.1 数据交互技巧
在1stOpt中,与Excel进行数据交互非常简单。可以通过复制粘贴的方式直接导入或导出数据。对于需要进行更自动化处理的场景,可以使用1stOpt内置的“数据导入”和“数据导出”功能,它们可以直接与Excel文件进行交互。
当涉及到与MATLAB的交互时,1stOpt提供了专门的函数和方法以支持两种软件之间的数据和命令传输。例如,使用`matlab()`函数可以执行MATLAB命令并获取结果,而`load()`和`save()`函数则用于加载和保存MATLAB工作空间的数据。
### 6.1.2 跨平台问题解决
在不同操作系统平台间,比如从Windows系统下的1stOpt与Linux下的MATLAB,交互时可能会遇到路径分隔符、环境变量等跨平台问题。为了解决这些问题,1stOpt提供了平台无关的文件路径处理函数和环境变量映射,使得跨平台数据交互更为顺畅。
```matlab
% MATLAB代码示例,显示1stOpt函数的调用方式
result = matlab('version'); % 查询MATLAB版本
```
## 6.2 与数据库系统的整合
对于需要处理大量数据的用户,与数据库系统的整合显得尤为关键。1stOpt 5.0支持多种数据库系统,如Microsoft SQL Server、Oracle、MySQL等,并提供了简易的数据连接和管理方法。
### 6.2.1 数据库连接方法
使用1stOpt连接数据库主要通过ODBC或JDBC两种方式。首先,需要在1stOpt的“数据库连接”界面配置相应的ODBC数据源或JDBC驱动。配置完成后,就可以使用SQL语句进行数据查询、添加、修改等操作。
```sql
% 一个使用ODBC连接数据库,并执行SQL查询的示例
SELECT * FROM 数据表名 WHERE 条件;
```
### 6.2.2 大数据处理与应用
大数据处理已经成为当前数据分析的一个重点。通过与数据库系统的整合,1stOpt可以将自身强大的优化算法应用于大数据场景。例如,在大数据环境下进行变量筛选、数据挖掘等操作,可以极大提升分析效率和结果的准确性。
## 6.3 云平台与分布式计算支持
云计算技术的普及使得分布式计算变得触手可及。1stOpt 5.0对云平台的原生支持,特别是对Amazon Web Services、Microsoft Azure等主流云服务的支持,为用户提供了极大的便利。
### 6.3.1 云服务的配置与应用
配置1stOpt以使用云服务,需要指定相关的云服务接口和参数。这包括认证信息的配置、虚拟机资源的请求以及数据的上传和下载。一旦配置完毕,1stOpt即可将优化任务分配到云端的多个计算节点,实现并行计算。
### 6.3.2 分布式计算的优势与实施
分布式计算的优势在于它可以显著降低计算时间,特别是在处理大规模、复杂的优化问题时。利用1stOpt,用户可以轻松启动分布式计算任务,并监控每个节点的运行状态。在实施方面,主要涉及到资源的合理分配、任务的负载均衡和结果的汇总。
```python
# 一个使用Python进行云平台资源配置的示例代码
import boto3
# 创建EC2资源对象
ec2 = boto3.resource('ec2', region_name='us-west-2')
# 创建一个EC2实例
instance = ec2.create_instances(
ImageId='ami-0c55b159cbfafe1f0', # AMI ID
MinCount=1, # 最少启动实例数量
MaxCount=1, # 最多启动实例数量
InstanceType='t2.micro', # 实例类型
)
```
1stOpt 5.0与其他软件的集成不仅提升了软件的适用范围,还极大地增强了其数据处理和分析的能力。通过与Excel、MATLAB、数据库系统及云平台的整合,1stOpt可以为用户提供更加丰富和灵活的优化解决方案。
0
0
相关推荐
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)