마르코프 체인을 나타내는 클래스를 작성하고 싶습니다 (이름은 MC
). 그것은 상태 천이 행렬 (즉, vector<vector<double>>
)을 취하는 생성자를 가지고 있습니다. 실제로는 행렬 (행과 열의 수가 동일 함)을 확인하는 것이 좋습니다. 실제로는 전환 행렬입니다. 모두 그 안의 수는 0.0
이상이고 1.0
보다 크지 않을 확률이며, 모든 행에 대해 그 요소의 합은 1.0
이지만, 부동 소수점 제한으로 인해 발생하는 문제가 있습니다. 예를 들어, 0.3 + 0.3 + 0.3 + 0.1
는 1.0
에 동일하지 않으므로 검사가 그렇게 쉽게되지 않습니다 그래서이 두 가지 가능한 그 문제의 해결을 참조하십시오..부동 소수점 인수가 올바른지 확인
- 일부 엡실론을 선택하고 엡실론 오류와 비교를 물론 지금은 약간의 행렬을 수락 전환 행렬 속성을 위반하지만 일반적으로 누군가가 때때로 잘못된 데이터를 생성자에 전달하면 예외가 발생합니다.
- 아무것도 확인하지 말고, 클래스 사용자에게 의지하십시오. 만약 그가 뭔가 나쁜 것을 전달한다면, 그것은 완전히 그의 잘못이고, 클래스의 행동은 예상치 못한 것입니다.
어떤 접근 방식이 더 좋고 "실제"더 좋은가? 나는 처음을 좋아하지만 다시 어떻게 엡실론을 선택해야하는지 확신 할 수 없다.
1 번째로 좋습니다. 제 2 세계는 실세계입니다. 따라서 저는 전세계에 많은 코드가 있다는 것을 의미합니다. 당신이 신경 쓰면 방어 적으로 행동하십시오. 그러지 마. –
분명히 첫 번째 옵션이 더 좋습니다. 그러나 기준에서 작은 편차가 문제가 될 수 있다면 미묘한 점을 추가하는 것이 좋습니다. 생성자는 하나 이상의 수정 된 전환 행렬을 저장할 수있는 옵션을 가질 수 있습니다 원소들의 합이 가능한 한 '1.0'에 가깝도록 각 행의 원소들의 수를 수정한다. 인기있는 라이브러리에서이를위한 선례가 있습니다 (예 :'a'의 원소가'1.0'에 더해지지 않는 경우를 다루기 위해'a [i]/sum (a) '와 같아 지도록 배열의 각 원소를 정규화합니다. – Simon
@ 사이먼을 분명히 알았습니까? 내 눈을 멀게하는 것처럼 보입니다. –