小编Geo*_*met的帖子

我如何使用Drools Planner?

我有一个日程安排问题,每个学生表达他对讲座的偏好,同时为所有学生生成课程时间表(如果可能的话,以批处理模式).

根据我的阅读和理解,Drools Planner非常适合解决此类问题.我在我的Eclipse IDE中安装了Drools和GEF.一切都很好.不幸的是,我无法弄清楚如何构建一个简单的项目.

我在网上寻找参考资料,并找到了Drools Planner的例子,这些例子看起来很棒.但是,除了一些代码片段之外,我没有找到任何可以引导人们完成简单案例的好教程.

如何为匹配/日程安排问题建模,其中3名具有独特时间和课程偏好的学生希望注册4门课程?我如何启动代码,在哪里放置约束,我调用哪些类,等等?

任何帮助将不胜感激!!

谢谢!!

java optimization artificial-intelligence drools-planner optaplanner

6
推荐指数
1
解决办法
2577
查看次数

Jenkins:由于工作区问题从红色变为灰色,我如何制作失败版本的颜色?

当构建我们的代码(例如编译问题)时出现问题时,我们的jenkins构建应该只是红色.

如果有一个sysops问题 - 例如工作区已满,一些奴隶关闭,......我们需要将工作变为灰色,表明Jenkins本身存在问题,但开发人员应该处于高度警戒状态.

这是一个需要将作业变为灰色而不是红色的作业日志:

04:19:19 ERROR: SEVERE ERROR occurs
04:19:19 org.jenkinsci.lib.envinject.EnvInjectException: hudson.remoting.ChannelClosedException: channel is already closed
04:19:19    at org.jenkinsci.plugins.envinject.service.EnvironmentVariablesNodeLoader.gatherEnvironmentVariablesNode(EnvironmentVariablesNodeLoader.java:75)
04:19:19    at org.jenkinsci.plugins.envinject.EnvInjectListener.loadEnvironmentVariablesNode(EnvInjectListener.java:81)
04:19:19    at org.jenkinsci.plugins.envinject.EnvInjectListener.setUpEnvironment(EnvInjectListener.java:39)
04:19:19    at hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:572)
04:19:19    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:492)
04:19:19    at hudson.model.Run.execute(Run.java:1738)
04:19:19    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:531)
04:19:19    at hudson.model.ResourceController.execute(ResourceController.java:98)
04:19:19    at hudson.model.Executor.run(Executor.java:410)
04:19:19 Caused by: hudson.remoting.ChannelClosedException: channel is already closed
04:19:19    at hudson.remoting.Channel.send(Channel.java:578)
04:19:19    at hudson.remoting.Request.call(Request.java:130)
04:19:19    at hudson.remoting.Channel.call(Channel.java:780)
04:19:19    at hudson.FilePath.act(FilePath.java:1074)
04:19:19    at org.jenkinsci.plugins.envinject.service.EnvironmentVariablesNodeLoader.gatherEnvironmentVariablesNode(EnvironmentVariablesNodeLoader.java:44) …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-plugins

6
推荐指数
1
解决办法
548
查看次数

以负载平衡的方式在4个线程上分配10个无限作业(Java)

我有10个计算工作需要(接近)无限时间.例如:计算PI的下一个数字,解决 NP-hard约束满足问题等.

我有4个线程(这样一个线程池4个线程的机器上8个内核,所以我有一些核心留给避免活锁的机器和过程).

使用Java 8,如何在这4个线程中分配这10个作业?

这是一个坏主意:

ExecutorService es = Executors.newFixedThreadPool(4);
for (Job j : jobs) {
    es.submit(j);
}
Run Code Online (Sandbox Code Playgroud)

因为4个工作将开始,但没有一个工作将完成所以工作5-10永远不会开始.

如果我照顾例如10分钟,我希望每个工作都运行大约4分钟.20分钟后,每项工作已经运行了大约8分钟,等等.处理这种情况的典型模式是什么?(如果需要,我可以在预设的时间后实现一种暂停计算的方法.)

java concurrency multithreading threadpool

6
推荐指数
1
解决办法
604
查看次数

Link rel ="canonical":不同的用户指南版本是否应使用相同的规范网址?

2个不同版本的用户指南是否应使用不同的规范URL

文档版本1.1.0.Final:

<link rel="canonical" href="http://docs.foo.org/1.1.0.Final/index.html">
Run Code Online (Sandbox Code Playgroud)

文档版本1.2.0.Final:

<link rel="canonical" href="http://docs.foo.org/1.2.0.Final/index.html">
Run Code Online (Sandbox Code Playgroud)

或者2个不同版本的用户指南是否应使用相同的规范URL

文档版本1.1.0.Final:

<link rel="canonical" href="http://docs.foo.org/latestFinal/index.html">
Run Code Online (Sandbox Code Playgroud)

文档版本1.2.0.Final:

<link rel="canonical" href="http://docs.foo.org/latestFinal/index.html">
Run Code Online (Sandbox Code Playgroud)

html documentation seo user-guide canonical-link

6
推荐指数
1
解决办法
168
查看次数

在slf4j中使用decimalformat或logback来填充或识别号码,使它们对齐

我在SLF4J中有这个日志语句(在它下面有Logback):

        logger.info("{} has {} depots, {00} vehicles and {} customers with a search space of {}.", ...);
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

A-n62-k8 has 1 depots, 8 vehicles and 61 customers with a search space of 10^108.
A-n63-k10 has 1 depots, 10 vehicles and 62 customers with a search space of 10^111.
Run Code Online (Sandbox Code Playgroud)

但我想要这个输出,它增加了额外的空间填充/缩进:

A-n62-k8  has 1 depots,  8 vehicles and 61 customers with a search space of 10^108.
A-n63-k10 has 1 depots, 10 vehicles and 62 customers with a search space of 10^111.
Run Code Online (Sandbox Code Playgroud)

这可能与SLF4J一起使用吗?

java logging logback slf4j

5
推荐指数
1
解决办法
1804
查看次数

Slf4j或Logback:关闭1个单元测试(或1个线程)的日志记录

我想关闭1个单元测试的日志记录(这不会失败),因此stacktrace不会显示在日志中。该堆栈跟踪应该在生产运行中存在,因为它是一个故障测试测试。

生产代码如下所示:

boolean failed = false;
for (int i = 0; i < 10; i++) {
    try {
        // Possible submits on Executor to run on other thread (not that it matters)
        runTask(i); 
    } catch (RuntimeException e) {
        // In the unit test, this pollutes the test log // BAD, MY PROBLEM
        // In production, it shows up in the log immediately, before other tasks run // GOOD
        logger.warn("Task failed. Stacktrace:", e);
        failed = true;
    }
}
if (failed) { …
Run Code Online (Sandbox Code Playgroud)

java logging logback slf4j

5
推荐指数
2
解决办法
6061
查看次数

来自另一个类的 getter/setter 的 MethodHandle 给出了 NoSuchFieldError

假设我有MyPerson一个带有namegetter 和 setter 的简单 javabean:

public class MyPerson {

    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我正在运行这个主要代码,它只是获取和设置该name字段:

    public static void main(String[] args) throws Throwable {
        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodHandle getterMethodHandle = lookup.findGetter(MyPerson.class, "name", String.class);
        MethodHandle setterMethodHandle = lookup.findSetter(MyPerson.class, "name", String.class);
        MyPerson a = new MyPerson();
        a.setName("Batman");
        System.out.println("Name from getterMethodHandle: " + getterMethodHandle.invoke(a));
        setterMethodHandle.invoke(a, "Robin");
        System.out.println("Name after setterMethodHandle: " + a.getName()); …
Run Code Online (Sandbox Code Playgroud)

java reflection methodhandle

5
推荐指数
1
解决办法
2985
查看次数

LambdaMetafactory 访问不同 ClassLoader 上的类

我有这段代码可以正常工作:

Method getterMethod = Person.class.getDeclaredMethod("getName");

MethodHandles.Lookup lookup = MethodHandles.publicLookup();
Class<?> declaringClass = getterMethod.getDeclaringClass();
Class<?> returnType = getterMethod.getReturnType();
CallSite getterSite = LambdaMetafactory.metafactory(lookup,
    "apply",
    MethodType.methodType(Function.class),
    MethodType.methodType(Object.class, Object.class),
    lookup.findVirtual(declaringClass, getterMethod.getName(), MethodType.methodType(returnType)),
    MethodType.methodType(propertyType, declaringClass));

Function getterFunction = (Function) getterSite.getTarget().invokeExact();
Run Code Online (Sandbox Code Playgroud)

但是,如果该getterMethod方法来自从不同 ClassLoader 加载的类,则会抛出:

Caused by: java.lang.invoke.LambdaConversionException: Invalid caller: java.lang.Object
    at java.lang.invoke.AbstractValidatingLambdaMetafactory.<init>(AbstractValidatingLambdaMetafactory.java:118)
    at java.lang.invoke.InnerClassLambdaMetafactory.<init>(InnerClassLambdaMetafactory.java:155)
    at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:299)
Run Code Online (Sandbox Code Playgroud)

如何将我的ClassLoader实例传递给LambdaMetafactory

java lambda methodhandle lambda-metafactory

5
推荐指数
1
解决办法
1669
查看次数

使用javax.annotation.Nonnull:要从中获取哪个Java jar依赖项?

在我们的开放源代码约束求解器(OptaPlanner)中,我也想使用@NonNull它使Kotlin更友好并且更清楚地从Java使用。

spring-core已经使用了@NonNull例如在此代码中。它们有效地声明了每个方法参数是否可空,如此处所述

我应该使用哪个Maven / Gradle依赖项将类包含javax.annotation.Nonnull在类路径中?春天的家伙们使用哪一个?例如,我在其依赖项列表中没有发现findbugs JSR-305 jar 。

(并且我可以将其作为可选依赖项来避免膨胀用户的类路径吗?)

java spring kotlin

5
推荐指数
1
解决办法
6275
查看次数

如何从 OptaPlanner 升级到 Timefold?

我们不久前将 OptaPlanner 分叉为 Timefold 。我们经常会收到这样的问题:

Timefold 更改所有导入语句和依赖项。如何有效地将 OptaPlanner 代码库迁移到 Timefold?

java optaplanner timefold

5
推荐指数
1
解决办法
481
查看次数