자주 사용할 random, 수식 비교 함수 추가

This commit is contained in:
2018-03-28 04:42:13 +09:00
parent 327ea72214
commit dc6596b5ab
+66
View File
@@ -169,6 +169,72 @@ class Util extends \utilphp\util{
return $dict;
}
/**
* 0.0~1.0 사이의 랜덤 float
* @return float
*/
public static function randF(){
return mt_rand() / mt_getrandmax();
}
/**
* $prob의 확률로 true를 반환
* @return boolean
*/
public static function randBool($prob = 0.5){
return randF() < $prob;
}
/**
* $min과 $max 사이의 값으로 교정
*/
public static function valueFit($value, $min, $max){
if($value < $min){
return $min;
}
if($value > $max){
return $max;
}
return $value;
}
/**
* 각 값의 비중에 따라 랜덤한 값을 선택
*
* @param array 각 수치의 비중
*
* @return object 선택된 랜덤 값의 key값. 단순 배열인 경우에는 index
*/
public static function choiceRandomUsingWeight(array $items){
$sum = 0;
foreach($items as $value){
$sum += $value;
}
$rd = self::randF()*$sum;
foreach($items as $key=>$value){
if($rd <= $value){
return $key;
}
$rd -= $value;
}
//fallback. 이곳으로 빠지지 않음
end($items);
return key($items);
}
/**
* 배열의 아무거나 고름. Python의 random.choice()
*
* @param array 선택하고자 하는 배열
*
* @return object 선택된 value값.
*/
public static function choiceRandom(array $items){
return $items[array_rand($items)];
}
};