C语言实现单纯形法求解运筹学课程设计实例

需积分: 33 16 下载量 156 浏览量 更新于2024-09-08 2 收藏 45KB DOC 举报
本资源是一份基于C语言编写的单纯形法课程设计程序,应用于运筹学课程中解决线性规划问题。该程序涉及的专业是信息管理与信息系统,由长春工业大学130506班学生于松南、张鑫蕊、赵改玲、赵海潮完成,指导教师为王亚君和王忠吉,完成时间为2015年7月3日。 在运筹学中,单纯形法是一种求解线性规划问题的有效算法,它主要针对带有约束条件的目标函数进行优化。该程序的主要结构包括以下几个关键部分: 1. 定义变量和数组: - `m` 表示约束条件方程组的数量。 - `n` 表示未知量(决策变量)的个数。 - `M` 是一个大常数,用于处理目标函数。 - `A` 二维数组用于存储线性规划中的系数矩阵。 - `C` 和 `b` 分别存储目标函数中变量的系数和常数项。 - `CB` 用于存储基变量的系数。 - `seta` 用于记录基变量的变化情况。 - `cn` 存储检验数矩阵,用于判断是否达到最优解。 - `x` 为决策变量的数组。 - `num` 存储变量进出基的情况。 - `Z` 记录目标函数的当前值。 2. 函数定义: - `shuru()`:可能是一个输入数据或初始化函数,用于读取或设置问题的具体参数。 - `print()`:负责打印当前的单纯形表,展示当前的状态。 - `mincz()`:寻找下一个进入基的变量(最小正检验数),若没有找到,则表示已达到最优解。 - `find_line(int q)`:根据最小正检验数 `q` 找到需要交换的行,通常在单纯形表中进行行操作。 - `exchange(int a, int b)`:执行变量的交换操作,更新单纯形表。 3. 主函数 `main()` 的流程: - 首先调用 `shuru()` 函数获取输入数据。 - 在一个无限循环中,不断调用 `mincz()` 和 `find_line()`,直到找到最优解或者无法继续简化(`mincz()` 返回-1)。 - 在每次迭代后,通过 `print()` 显示当前的单纯形表,包括基变量、非基变量以及目标函数值。 - 当找到最优解时,将满足约束条件的变量值赋给 `x[]`,并计算目标函数 `Z` 的最终值,然后退出循环。 整个程序实现了单纯形法的基本步骤,适用于求解具有约束条件的线性优化问题,通过迭代更新基变量来逐步逼近最优解。值得注意的是,使用对偶单纯形表可以避免引入人工变量,但在给出的代码中并未提及这部分内容。