我有一个日程安排问题,每个学生表达他对讲座的偏好,同时为所有学生生成课程时间表(如果可能的话,以批处理模式).
根据我的阅读和理解,Drools Planner非常适合解决此类问题.我在我的Eclipse IDE中安装了Drools和GEF.一切都很好.不幸的是,我无法弄清楚如何构建一个简单的项目.
我在网上寻找参考资料,并找到了Drools Planner的例子,这些例子看起来很棒.但是,除了一些代码片段之外,我没有找到任何可以引导人们完成简单案例的好教程.
如何为匹配/日程安排问题建模,其中3名具有独特时间和课程偏好的学生希望注册4门课程?我如何启动代码,在哪里放置约束,我调用哪些类,等等?
任何帮助将不胜感激!!
谢谢!!
java optimization artificial-intelligence drools-planner optaplanner
当构建我们的代码(例如编译问题)时出现问题时,我们的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) 我有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分钟,等等.处理这种情况的典型模式是什么?(如果需要,我可以在预设的时间后实现一种暂停计算的方法.)
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) 我在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一起使用吗?
我想关闭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) 假设我有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) 我有这段代码可以正常工作:
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?
在我们的开放源代码约束求解器(OptaPlanner)中,我也想使用@NonNull它使Kotlin更友好并且更清楚地从Java使用。
spring-core已经使用了@NonNull,例如在此代码中。它们有效地声明了每个方法参数是否可为空,如此处所述。
我应该使用哪个Maven / Gradle依赖项将类包含javax.annotation.Nonnull在类路径中?春天的家伙们使用哪一个?例如,我在其依赖项列表中没有发现findbugs JSR-305 jar 。
(并且我可以将其作为可选依赖项来避免膨胀用户的类路径吗?)
我们不久前将 OptaPlanner 分叉为 Timefold 。我们经常会收到这样的问题:
Timefold 更改所有导入语句和依赖项。如何有效地将 OptaPlanner 代码库迁移到 Timefold?
java ×8
logback ×2
logging ×2
methodhandle ×2
optaplanner ×2
slf4j ×2
concurrency ×1
html ×1
jenkins ×1
kotlin ×1
lambda ×1
optimization ×1
reflection ×1
seo ×1
spring ×1
threadpool ×1
timefold ×1
user-guide ×1