2016-10-26 12 views
3

의 시스템을 해결.(둘 이상의) 선형 부등식

{(t_0, -9*t_0 - 5*t_1 + 154, -5*t_0 - 3*t_1 + 77)} 

괜찮아요. 그러나 때로는 x, y 및 z가 음수가 아닌 (즉) 음수가되도록 제약 할 수 있습니다. 나는이 <

reduce_inequalities([0<=t_0, 0<=-9*t_0 - 5*t_1 + 154, 0<=-5*t_0 - 3*t_1 + 77],[t_0, t_1]) 

같은 접근 방식을 사용할 때 내가 얻을 :

NotImplementedError: 
inequality has more than one symbol of interest 

이 sympy, 세이지, 프롤로그, 하스켈 또는 다른 자유롭게 사용할 제품에서 발생하는 선형 불평등의 시스템을 해결하기위한 수단이 있습니까

이 방법.

감사합니다.

+0

http://docs.sympy.org/latest/modules/solvers/inequalities.html#inequality-docs를 보셨습니까? 나는 결코 그것을 시도하지는 않았지만 그것이 선형 세트의 불평등에 대해 효과가 있어야한다고 생각한다. 숫자 솔루션으로 충분하다면'scipy.optimize.linprog()'를 살펴보십시오. – Dietrich

+0

해결하고자하는 방정식 유형의 예를 게시 할 수 있습니까? – asmeurer

+0

귀하의 의견에 대해 @Dietrich에게 많은 감사를드립니다. 나는 http://stackoverflow.com/questions/40441532/how-to-restrict-sympy-finiteset-containing-symbol/40443339#40443339에 질문을 만날 때까지 그것을 읽는 것을 잊고 있었다. 불평등의 시스템 *을 해결하는 것이 가능하다는 것을 이해하지 못했습니다. –

답변

2

정수 프롤로그에, 당신은 당신의 프롤로그 시스템의 CLP (FD)   제약을 사용할 수 있습니다 추론합니다.

Prolog 시스템마다 정확한 세부 사항이 약간 다릅니다. 자세한 내용은 시스템 설명서를 참조하고 관련 질문은 을 참조하십시오. 귀하의 경우에는

, 우리는 단순히 제약을 게시하여 시작할 수 있습니다

 
?- 2*X + 3*Y - 5*Z #= 77. 
2*X+3*Y#=5*Z+77. 
이 경우

, 모든 순수 프롤로그 프로그램으로, 시스템의 대답은 선언적으로 원래의 질의에 해당입니다 . 여기서는 많은 도움이되지 않습니다. 시스템은 원래의 제약 조건을 약간만 재 작성했습니다.

당신은 함께 예를 들어,이 제한 할 수 있습니다

요청으로
 
?- 2*X + 3*Y - 5*Z #= 77, 
    [X,Y,Z] ins 0..sup. 
X in 0..sup, 
2*X+3*Y#=5*Z+77, 
Y in 0..sup, 
Z in 0..sup. 

이 추가 목표는 음이 아닌 정수 변수를 제한합니다. 시스템의 대답은 여전히 ​​  많은 도움이되지 않습니다.

label/1을 사용하면 개의 솔루션을 검색 할 수 있습니다. 우리가 시도하는 시간이하지 않는 것이

 
?- 2*X + 3*Y - 5*Z #= 77, 
    Vs = [X,Y,Z], 
    Vs ins 0..sup, 
    label(Vs). 
ERROR: Arguments are not sufficiently instantiated 

좋은 소식을 (어떤 의미에서)있다 : 그러나,이 소위 라벨는 모든 도메인이   유한, 그리고 우리가 현재 얻을 것을 요구한다 모두 가능성도 있습니다. 그래서 우리는 검색 공간의 유한 한 부분에 자신을 제한 할 수도 있습니다.예를 들어 :

 
?- 2*X + 3*Y - 5*Z #= 77, 
    Vs = [X,Y,Z], 
    Vs ins 0..10 000 000 000 000 000 000, 
    label(Vs). 

이 쿼리를 사용하면 정수 솔루션으로 콘크리트 얻을 : 당신이 이상 선형 제약을 추론하고 있기 때문에

 
X = 0, 
Y = 29, 
Z = 2, 
Vs = [0, 29, 2] ; 
X = 0, 
Y = 34, 
Z = 5, 
Vs = [0, 34, 5] ; 
X = 0, 
Y = 39, 
Z = 8, 
Vs = [0, 39, 8] ; 
X = 0, 
Y = 44, 
Z = 11, 
Vs = [0, 44, 11] ; 
etc. 

을, CLP (Q)도 가치가있을 수있다   시험.

+0

감사합니다. 이것은 흥미로운 연구를 만듭니다. –