表上作业法-运输问题(Java)

1 前言

  设计Java程序使用表上作业法求解产销平衡运输问题。本文思路:

  1. 最小元素法确定初始基可行解(最小元素法本质贪婪算法)。
  2. 位势法求解检验数。
  3. 闭回路调整法调整初始基可行解,获得最优解。其中闭回路使用深度优先搜索寻找。

若对以上方法、概念不熟悉请自行补充。

2 运输问题例题

采用清华大学第四版运输问题,题目如下:

单位运价

初始基本可行解

检验数表

最优解

3 程序

pacakage algori:算法

  1. GreedyAlgori:最小元素法求解初始基本可行解
  2. ReducedCost:求解检验数
  3. ImprovedClosedLoop:闭合回路
  4. DepthFirstSearch:深度优先搜索寻找闭回路
  5. TableDispatchingMethod:算法运行类

pacakage main:程序运行接口

pacakage transproblem:运输问题初始参数

pacakage util:工具方法

package algori;

import java.util.Arrays;

public class TableDispathcingMethod {
    //运价表
    int[][] cost;

    //存放调运方案
    int[][] initialSolution;

    //检验数表
    int[][] locationOfBasicVar;

    // 检验数
    int[][] reducedCost;

    int[][] optimalSolution;

    public TableDispathcingMethod(int[][] cost, int[] supply, int[] demand) {

        this.cost = new int[supply.length][demand.length];
        for (int i = 0; i < cost.length; i++) {
            this.cost[i] = Arrays.copyOf(cost[i], cost[i].length);
        }

        this.initialSolution = new int[supply.length][demand.length];
        this.reducedCost = new int[supply.length][demand.length];
        for (int[] ints : reducedCost) {
            Arrays.fill(ints, Integer.MAX_VALUE);
        }
        //最小元素法 获得初始基本可行解
        GreedyAlgori greedyAlgori = new GreedyAlgori(cost, supply, demand, initialSolution);
        //基变量位置
        this.locationOfBasicVar = greedyAlgori.basicVar;
        //求检验数
        new ReducedCost(this.cost, reducedCost, locationOfBasicVar);
        //寻找闭合回路
        ImprovedClosedLoop ilp = new ImprovedClosedLoop(reducedCost);
        optimalSolution = ilp.optimize(initialSolution);
        writeAns();
    }

    public void writeAns() {
        System.out.println("\n最优解: ");
        for (int i = 0; i < optimalSolution.length; i++) {
            System.out.println(Arrays.toString(optimalSolution[i]));
        }
    }
}

4 运行结果

{7=1, 3=2, 2=3, 6=4},等号前的数字为检验数的位置,后的数字为搜索时的顺序。 

5 附录

(1条消息) 表上作业法-运输问题(Java)-Java文档类资源-CSDN下载

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mysql-connector-java是MySQL数据库官方提供的用于Java开发的驱动程序。它提供了与MySQL数据库进行连接、查询、更新和管理等功能的API。通过使用mysql-connector-java,开发者可以在Java程序中方便地对MySQL数据库进行操作。 mysql-connector-java的主要功能包括连接管理、数据查询、事务处理和异常处理等。它提供了连接池技术,可以有效地管理多个数据库连接,提高数据库操作的性能和并发能力。通过mysql-connector-java,开发者可以方便地进行SQL语句的编写和执行,可以执行查询、更新、插入和删除等操作。同时,它支持事务处理,可以保证数据操作的原子性、一致性、隔离性和持久性。在进行数据库操作时,也可以通过mysql-connector-java对异常进行捕获和处理,保证程序的稳定性和可靠性。 对于开发者来说,使用mysql-connector-java的好处是显而易见的。首先,它是官方提供的驱动程序,具有稳定性和可靠性。其次,它提供了丰富的API,可以满足大部分数据库操作的需求。再次,它支持连接池技术和事务处理,可以提高程序的性能和可扩展性。此外,mysql-connector-java还提供了一些额外的功能,如SSL加密、压缩和回滚等,可以根据具体需求进行配置和使用。 总之,mysql-connector-javaJava开发中常用的数据库驱动程序之一。通过使用它,开发者可以方便地与MySQL数据库进行交互,实现各种数据库操作。无论是开发小型应用还是大型系统,mysql-connector-java都是一款值得推荐的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值