首页 > 其他分享 >opta

opta

时间:2024-09-12 23:26:50浏览次数:1  
标签:core optaplanner opta factory api org import

 <dependency>
            <groupId>org.optaplanner</groupId>
            <artifactId>optaplanner-spring-boot-starter</artifactId>
            <version>9.44.0.Final</version>
        </dependency>





import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
import org.optaplanner.core.api.domain.solution.PlanningScore;
import org.optaplanner.core.api.domain.solution.PlanningSolution;
import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
import org.optaplanner.core.api.score.buildin.simple.SimpleScore;

@Data
@AllArgsConstructor
@NoArgsConstructor
@PlanningSolution
public class NQueens {
    private int n;
    private List<Queen> queenList;
    private SimpleScore score;

    @ValueRangeProvider(id = "columnRange")
    public List<Integer> getColumnList() {
        return IntStream.range(0, n).boxed().collect(Collectors.toList());
    }

    @PlanningEntityCollectionProperty
    public List<Queen> getQueenList() {
        return queenList;
    }

    @PlanningScore
    public SimpleScore getScore() {
        return score;
    }

}




import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.core.api.score.stream.Constraint;
import org.optaplanner.core.api.score.stream.ConstraintFactory;
import org.optaplanner.core.api.score.stream.ConstraintProvider;
import org.optaplanner.core.api.score.stream.Joiners;

import static org.optaplanner.core.api.score.stream.Joiners.equal;

public class NQueensConstraintProvider implements ConstraintProvider {


    @Override
    public Constraint[] defineConstraints(ConstraintFactory factory) {
        return new Constraint[] {
                horizontalConflict(factory),
                verticalConflict(factory),
                ascendingDiagonalConflict(factory),
                descendingDiagonalConflict(factory),
        };
    }

    // ************************************************************************
    // Hard constraints
    // ************************************************************************

    protected Constraint horizontalConflict(ConstraintFactory factory) {
        return factory.forEachUniquePair(Queen.class, equal(Queen::getRow))
                .penalize(SimpleScore.ONE)
                .asConstraint("Horizontal conflict");
    }
    protected Constraint verticalConflict(ConstraintFactory factory) {
        return factory.forEachUniquePair(Queen.class, equal(Queen::getColumn))
                .penalize(SimpleScore.ONE)
                .asConstraint("vertical conflict");
    }

    protected Constraint ascendingDiagonalConflict(ConstraintFactory factory) {
        return factory.forEachUniquePair(Queen.class, equal(queen -> queen.getRow()- queen.getColumn()))
                .penalize(SimpleScore.ONE)
                .asConstraint("Ascending diagonal conflict");
    }

    protected Constraint descendingDiagonalConflict(ConstraintFactory factory) {
        return factory.forEachUniquePair(Queen.class, equal(queen -> queen.getRow()+ queen.getColumn()))
                .penalize(SimpleScore.ONE)
                .asConstraint("Descending diagonal conflict");
    }
 
}






import org.optaplanner.core.api.solver.SolverJob;
import org.optaplanner.core.api.solver.SolverManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.UUID;
import java.util.concurrent.ExecutionException;

@Service
public class NQueensService {

    @Resource
    private SolverManager<NQueens, UUID> solverManager;

    public NQueens solve(NQueens problem) {
        UUID problemId = UUID.randomUUID();
        SolverJob<NQueens, UUID> solverJob = solverManager.solve(problemId, problem);
        try {
            return solverJob.getFinalBestSolution();
        } catch (InterruptedException | ExecutionException e) {
            throw new IllegalStateException("Solving failed.", e);
        }
    }
}






import lombok.Data;
import org.optaplanner.core.api.domain.entity.PlanningEntity;
import org.optaplanner.core.api.domain.variable.PlanningVariable;

@Data
@PlanningEntity
public class Queen {
    private int row;
    private int column;

    @PlanningVariable(valueRangeProviderRefs = "columnRange")
    public int getColumn() {
        return column;
    }

    public void setColumn(int column) {
        this.column = column;
    }

    // 构造函数、getter 和 setter
}




1




1




1




标签:core,optaplanner,opta,factory,api,org,import
From: https://www.cnblogs.com/SetariaViridis/p/18411321

相关文章

  • Intel(R) Optane(TM) Memory and Storage Management Component 是一种软件组件,用于管
    Intel(R)Optane(TM)MemoryandStorageManagementComponent是一种软件组件,用于管理英特尔Optane存储技术。Optane技术是英特尔推出的一种新型存储技术,利用3DXPoint存储介质,具有极高的读写速度和低延迟,可用于加速系统的启动、应用程序加载和文件传输等操作。OptaneMem......
  • java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag问题的解决
    问题描述问题解决将这个依赖:改成这个依赖:......
  • 麒麟v10 SP3上的19c rac,optachauto安装补丁出错
    1、麒麟V10SP3上新安装的一套19cRAC,在使用opatchauto打补丁时报错,具体信息如下所示。[root@db01soft]#/u01/app/19.3.0/grid/OPatch/opatchautoapply/soft/35037840/ OPatchautosessionisinitiatedatTue0ct1011:04:452023 Systeminitializationlogfi......
  • Android官方资料--Adoptable Storage
    AdoptableStorageINTHISDOCUMENTSecurityPerformanceandstabilityAndroidhasalwayssupportedexternalstorageaccessories(suchasSDcards),buttheseaccessorieswerehistoricallylimitedtosimplefilestorage,duetotheirexpectedimpermanence......
  • SATA Mode:Optane without Raid导致lsblk检测不到磁盘
     本人是Win(WD512G)+Fedora(Lexar256G),在FedoraLinux中无法显示Windows的硬盘,但Fedora是自带NTFS驱动的,不存在文件系统不兼容。       (实际上影响不止于此,安装ubuntu会提示请关闭Raid功能,安装CentOS/deepin会完全检测不到任何硬盘,导致无法安装。本人当初无法解决,......
  • OptaPlanner 简介
    1.什么是OptaPlanner?每个组织都面临规划问题:以有限的资源(员工、资产、时间和金钱)提供产品或服务。OptaPlanner优化此类计划以用更少的资源开展......