2017-11-15 21 views
-1

Choco solver을 사용하여 여러 가지 제약 조건을 만족하는 수학 문제를 생성하는 Java 프로그램을 작성하고 싶습니다. 문제는 다음과 같은 형태로 가지고 가야 :Choco Solver 수학 표현 생성

x @ y ∆ z = r 

을 여기서

  • x, & zy 그들 중 하나가 두 자리 인으로, 서로 반드시 차이가 양의 정수이다 나머지 두 자리는 1 자릿수입니다.

  • @ &또는 * (모두 같은 연산자에 대한 설 수 있습니다)

  • r이 양의 1 자리 정수

나는이 수학 문제를 생성 할에게있다 "-3210 사업자 +입니다 수요 "(당시와 마찬가지로)와 무작위 화가 필요합니다 (즉, 생성 된 문제에 대해 패턴이나 고정 주문이 없어야합니다.)

제약 (만족) 프로그래밍을 한 지 10 년이 지났지 만 C (S) P (가능하면 Choco를 사용)가 여기에 적용하기 적합한 도구라고 생각합니다. 이것이 맞습니까? 누군가 나를 시작할 수 있도록 도와 줄 수 있습니까?

+0

무엇이 당신의 질문입니까? – azurefrog

+0

@azurefrog 이것이 가능한지, 어떻게해야하는지 (즉, 시작하는 데 도움이되는 몇 가지 코드). – Matthias

+0

당신은 좀 더 구체적이어야합니다.기존의 javadoc, 사용자 가이드 및 튜토리얼의 예에서는 필요한 것을 어떻게 제공하지 않습니까? 우리는 당신이 우리에게 말하지 않으면 무엇을 시도했는지, 작동하지 않는지 알지 못합니다. – azurefrog

답변

3

당신은 확실히 이러한 문제를 모델링 할 수 있습니다 choco와 같은 CP 솔버가 있습니다. 당신은 자세한 내용은 documentationtutorials 봐이 필요합니다,하지만 당신이 필요합니다 :

  • Model 생성,
  • x, yz,
  • 에 대한 ( IntVar)를 정수 변수를 선언
  • 제약 조건을 연결하려면 IntVar 표현 API를 사용하여 선언을 쉽게하는 것이 좋습니다. 이러한 API를 사용하면 산술적, 논리적 및 관계형 표현을 작성할 수 있습니다. 사용자의 임의 선택에 따라 달라집니다 add, submul가 결합

    Model model = new Model(); 
    IntVar x = model.intVar(0, 9); 
    IntVar y = model.intVar(0, 9); 
    IntVar z = model.intVar(0, 9); 
    int r = 10; 
    x.add(y).sub(z).eq(r).post(); 
    model.getSolver().showSolutions(
        () -> String.format("%d + %d - %d = %d", 
          x.getValue(), y.getValue(), z.getValue(), r)); 
    model.getSolver().findAllSolutions(); 
    

    방법 : 여기

간단한 예입니다. 그런 다음 테이블 제약 조건을 사용하여 표현식을 인코딩하거나 솔버가 선택되도록 할 수 있습니다.