Ví dụ đơn giản về Random có trọng số với PHP

Random có trọng số

Random là một khái niệm hẳn đã rất quen thuộc đối với nhiều lập trình viên, và hẳn ai cũng đã ít nhiều phải sử dụng đến các hàm random trong các dịch vụ của mình.

Thế nhưng liệu bạn đã từng gặp những bài toán yêu cầu phải random những phần tử có xác suất xuất hiện là không giống nhau, hay gọi đơn giản là random có trọng số.

Ví dụ như bài toán đặt ra là ta có một danh sách các sản phẩm, và cần random ra 5 sản phẩm trong số đó để hiện thị ở ngoài trang chủ. Tuy nhiên ta lại không muốn tỉ lệ random ra các sản phẩm là như nhau, thay vào đó, một sản phẩm được 10 người mua sẽ có tỉ lệ random ra lớn hơn so với một sản phẩm chỉ có 7 người mua.

Và bài viết này sẽ giới thiệu đến bạn một package Composer để bạn có thể giải quyết vấn đề đó.

bias-random

bias-random là một package nhỏ gọn được tôi viết ra để giải quyết bài toán random có trọng số một cách đơn giản: Nếu có 2 phần tử A, với trọng số là a, và B, với trọng số là b, thì tỉ lệ random ra A sẽ là a/(a+b), tỉ lệ random ra B là b/(a+b)

Build Status Latest Stable Version Total Downloads License

Yêu cầu

  • PHP >= 5.4

Cài đặt

Cài đặt thông qua Composer

composer require wataridori/bias-random

Hoặc bạn có thể add wataridori/bias-random vào phần require trong file composer.json rồi sau đó chạy lệnh composer update

Sử dụng

$biasRandom = new wataridori/BiasRandom/BiasRandom();
$data = [
    'wataridori' => 10,
];
$biasRandom->setData($data);
$biasRandom->addElement('Tran', 20);
$biasRandom->addElement('Duc', 30);
$biasRandom->addElement('Thang', 40);

// Random ra 1 phần tử trong số 4 phần tử là 'wataridori', 'Tran', 'Duc', và 'Thang'
// Tỉ lệ ra 'wataridori' sẽ là 10%
// Tỉ lệ ra 'Tran' sẽ là 20%
// Tỉ lệ ra 'Duc' sẽ là 30%
// Tỉ lệ ra 'Thang' sẽ là 40%
$biasRandom->random();

// Random ra 2 phần tử
$biasRandom->random(2);

Unit Test

Bạn có thể chạy unit test thông qua lệnh phpunit

Contributing

Bạn có thể tham khảo source code và tham gia đóng góp cho package bằng cách gửi pull request về địa chỉ https://github.com/wataridori/bias-random

Các bước rất đơn giản:

  • Fork
  • Clone
  • Viết code & test case
  • phpunit
  • Push code
  • Tạo Pull Request