一. 相关资料
- choco-slover github源代码以及工具下载网址:https://github.com/chocoteam/choco-solver
- choco-slover 官网文档:https://choco-solver.org/
- choco-slover安装eclipse视频:https://www.youtube.com/watch?v=qz6ATkEI_F8
- 视频所采用的资源网址:https://drive.google.com/drive/folders/1C2QjazVAGANjFAyC8x2_G_rpHnbmqjrz
二. 测试代码
我们以官方文章中的代码为测试代码,创建文件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 我们直接添加即可,重复之前相同操作,成功运行。

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

被折叠的 条评论
为什么被折叠?



