Choco-slover的使用

本文详细介绍了如何在Eclipse中安装和使用Choco-solver,包括解决相关错误、安装TestNG插件的过程。通过创建测试代码、运行example文件夹中的Java文件,以及处理Java版本问题,最终成功运行并解决约束问题。

一. 相关资料

二. 测试代码

我们以官方文章中的代码为测试代码,创建文件test.java

import org.chocosolver.solver.Model;
import org.chocosolver.solver.variables.IntVar;
/**
* Trivial example showing how to use Choco Solver
* to solve the equation system
* x + y < 5
* x * y = 4
* with x in [0,5] and y in {2, 3, 8}
*
* @author Charles Prud'homme, Jean-Guillaume Fages
* @since 9/02/2016
*/
public class test {
public static void main(String[] args) {
	// 1. Create a Model
	Model model = new Model("my first problem");
	// 2. Create variables
	IntVar x = model.intVar("X", 0, 5); // x in [0,5]
	IntVar y = model.intVar("Y", new int[]{2, 3, 8}); // y in {2, 3, 8}
	// 3. Post constraints
	model.arithm(x, "+", y, "<", 5).post(); // x + y < 5
	model.times(x,y,4).post(); // x * y = 4
	// 4. Solve the problem
	model.getSolver().solve();
// 5. Print the solution
	System.out.println(x); // Prints X = 2
System.out.println(y); // Prints Y = 2
}
}

产生以下报错,这里我们需要把之前的自动创建的module-info.java文件删除
在这里插入图片描述
同时报错“The package org.chocosolver.solver is accessible from more than one module:”,此时看到他说有不止一个模型可以引入,所以我们刚才引入了两个两个关键的jar文件,并且实验得出我们只能删除source,no-dep具有完整功能,source无法完成,且必须使用no-dep否则具有依赖
在这里插入图片描述

在这里插入图片描述
这时不在有错误提醒,但是我们运行报错如下
在这里插入图片描述
通过查找资料大概得知我们的依赖即jar文件应该放在class path下而不是model path下,具体如下,详见文章1:http://www.360doc.com/content/18/0109/10/19075496_720439266.shtml
文章2:https://www.l2qq.com/share/113
在这里插入图片描述
在这里插入图片描述

将model path下所有jar文件移入class path
在这里插入图片描述
在这里插入图片描述
成功运行,获得约束问题的解
在这里插入图片描述

三. 运行example文件夹下使用jar编程解决实际问题的Java文件

拉入example文件夹下代码到SRC当中,需要将example当中main文件夹下org文件夹拉入src,不可以直接拉入example文件夹由于声明包时从org开始
在这里插入图片描述
以结局BIBD约束世界问题的BIBD.java文件为例,报错如下
在这里插入图片描述

可以通过clean方式解决,如第一条所示,参考文章:https://blog.youkuaiyun.com/kingmax54212008/article/details/79332771
在这里插入图片描述

在这里插入图片描述

clean后报错仍然存在,后来考虑到我们下载的时4.10.12中源代码的example文件夹,应该是使用Choco-slover 4.10.12.jar,而我们当前用的是Choco-slover 4.10.2.jar,我们删除老版本jar更新为新版本jar
在这里插入图片描述
报错消失成功运行
在这里插入图片描述

四. 运行example文件夹下使用jar编程解决实际问题的Java测试文件

我们以test文件夹下的sampletest文件为例,代码如下:

/*
 * This file is part of examples, http://choco-solver.org/
 *
 * Copyright (c) 2023, IMT Atlantique. All rights reserved.
 *
 * Licensed under the BSD 4-clause license.
 *
 * See LICENSE file in the project root for full license information.
 */
package org.chocosolver.examples;

import org.chocosolver.examples.integer.*;
import org.testng.annotations.Test;

/**
 * <br/>
 *
 * @author Charles Prud'homme
 * @since 05/09/11
 */
public class SamplesTest {

    AbstractProblem[] problems = {
            new BIBD(),
            new AllIntervalSeries(),
            new AirPlaneLanding(),
            new CarSequencing(),
            new Grocery(),
            new Knapsack(),
            new Langford(),
            new LatinSquare(),
            new MagicSquare(),
            new Nonogram(),
            new OrthoLatinSquare(),
            new Partition(),
            new SchurLemma(),
            new SocialGolfer(),
            new Sudoku(),
            new WarehouseLocation()
    };


    @Test(groups="5m", timeOut=300000)
    public void testAll() {
        for (AbstractProblem pb : problems) {
            pb.execute();
        }
    }
}

对于new每一个类都发生报错,不能作为一个类型,我们查看teset下的org.chocosolver.examples.integer.*文件只是一部分没有对于BIBD()进行定义,所以我们导入之后,由于为定义类,所以不能创建对象,sampletest.java 当中首行注释给出This file is part of examples,因此当前开源的test测试部分只是部分代码可能无法运行,其实目前研究不影响我们的使用,但是为了解决该问题,我们直接将sampletest.java 拉入到main下,使其能够成功调用到所有的类,此时所有ew每一个类的报错都消失
在这里插入图片描述

目前剩一个org.testng导入的错误

在这里插入图片描述

找到一个办法,可以选中右键添加 TestNG库,但是我们选中后没有,详见文章:https://blog.youkuaiyun.com/xing2516/article/details/111297911

在这里插入图片描述

我们注意上个办法文后给出了一个参考文章,得知需要安装一下TestNG插件,才可以,详见文章:http://www.51testing.com/html/63/n-3712363.html

在这里插入图片描述

但是我们打开Eclipse Marketplace压根搜不到TestNG,我们点击寻找更多,能找到了但是点击install,接下来的问题是如何按上这个软件

在这里插入图片描述

找到了多篇文章均提供了通过输入网址的方法,但是网址通过浏览器访问都404
https://blog.youkuaiyun.com/cbc520/article/details/111591959

在这里插入图片描述

https://www.bbsmax.com/A/RnJWyR9wdq/

在这里插入图片描述

上面的文章都给出在线和离线的方式,但是我们发现提供的网址都是失效的,因此需要一个新的有效网址,他们给出TestNG官网地址:http://testng.org/

在这里插入图片描述

点击Eclipse plug-in,进入网站https://github.com/cbeust/testng-eclipse/
下面也给出在线安装的方式,以及网址,我们使用该网址进行安装成功

在这里插入图片描述

在这里插入图片描述

下面提一嘴手欠经历,安装过程很长,网络不稳导致安装中断,重新按步骤安装后不在出现TestNG图标,同时感觉没有反应

在这里插入图片描述

按如下操作把之前登记的网址删除再重新操作即可

接下来我们安装成功后可以直接选中报错代码右键添加 TestNG库,或者通过下面方法

https://blog.youkuaiyun.com/xdg15294969271/article/details/124267764
在这里插入图片描述

此时代码不再报错,运行报错如下

在这里插入图片描述

查找各种办法如下

https://qa.1r1g.com/sf/ask/3561423911/
在这里插入图片描述
https://stackoverflow.com/questions/50877484/java-sql-time-exception
在这里插入图片描述
在这里插入图片描述

这些方法有用的不多,下面这句话提醒我可能用Java9以下的版本一试验,反正本来我java也是有1.8的

Gson 有一些 SQL 类型的默认适配器(其中之一是 java.sql.Time)。 从 Java 9 开始,SQL 类位于它们自己的模块 (java.sql) 中。 当您执行程序时,很可能默认情况下没有为您包含该模块。 然而,从 Gson 2.8.9 开始,对 SQL 类型的依赖是可选的。 您可以毫无问题地使用 Gson,即使它们不存在。

重新创建Java项目选择Java1.8的版本,不能创建module-info.java文件,没有在乎,同时项目当中添加jar没有class path 和model path 我们直接添加即可,重复之前相同操作,成功运行。

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值