Как сделать так, чтобы некоторые случайные числа появлялись больше, чем другие?

Я пытаюсь разместить свою собственную рекламу. Например, я хочу, чтобы те, кто предлагает цену до 0,25 доллара США за показ, показывали больше показов, чем те, которые предлагают цену до 0,10 доллара США. Я хочу разместить свои числа в случайном массиве, где участники с более высокой ставкой показывают больше показов. Я думаю, что я смотрю на неправильную логику. Я мог бы, возможно, найти правильный способ сделать это сам, если бы моя логика была направлена ​​в правильном направлении.

0

Решение

Последнее предложение Зартуса — правильный способ сделать это:

    class AdObject
{
private $asset = 0;

function __construct($asset)
{
$this->asset = $asset;
}

public function getAsset()
{
return $this->asset;
}

public function setAsset($asset_input)
{
$this->asset = $asset_input;
}

public function getScore()
{
return ($this->asset *(float)rand()/(float)getrandmax());
}
}

function chooseAdvertising($ads_array)
{
$scores_array = array ();

foreach ($ads_array as $value)
$scores_array[] = $value->getScore();

$max_indexes = array_keys($scores_array, max($scores_array));
return $max_indexes[0];
}
$advertisment_arr = array (new AdObject("0.15"), new AdObject("0.20"), new AdObject("0.32"));

Предположим, что функция chooseAdvertising предоставит вам индекс объявления, которое вы хотите отобразить, и который содержится в $ advertisment_arr.

Вы можете настроить функцию getScore или атрибуты AdObject, чтобы получить желаемый результат.

0

Другие решения

Вы можете просто добавить их несколько раз в массив (что является решением; но, возможно, это не лучший способ сделать это).

Давайте представим, у каждого из нас есть вес. Для каждых десяти центов мы дублируем элемент в массив.

Для моего примера мы имеем company1 который дал $ 0,30, и company2 который дал $ 0,10.

Ваш массив будет выглядеть так:

$data = array(
'company1', 'company1', 'company1',
'company2'
);

Однако проблема с этим типом генерации заключается в том, что ваши массивы могут стать довольно большими. Для больших приложений это не может быть идеальным.

Что касается наиболее эффективного решения, я думаю, что вы задаете неправильный вопрос — вам следует подумать о создании собственного алгоритма, который показывает людям, которые платили больше, чтобы показываться чаще, а не основывать его на генерации случайных чисел.

0

мои идеи будут:

1) работать с порогом использования и определять его максимальный размер на основе оплаты рекламы. F.E. установите количество использованных средств на сумму уплаченного цента. После того, как все пороги пусты, сбросьте их все. Afaik, это похоже на то, как Google работает для их рекламной системы.

2) Работа со вторым рандом. пусть это сравнимо с vaktor для ech ad, т. е. центы заплатили за это. Только если этот второй ранд больше фактора, вы его используете. в противном случае вы повторяете первый ранд, чтобы получить новое объявление.

с точки зрения бизнеса первым должен быть путь. Вы могли бы даже объединить оба. Порог от 1) может быть фактором для второго ранда в 2).

0