자주 사용할 random, 수식 비교 함수 추가
This commit is contained in:
@@ -169,6 +169,72 @@ class Util extends \utilphp\util{
|
|||||||
return $dict;
|
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)];
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user