PHPackages                             slavawins/mathsolutionfinder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. slavawins/mathsolutionfinder

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

slavawins/mathsolutionfinder
============================

Expa

0.2(3y ago)012MITPHPPHP ^7.3|^8.0

Since Feb 23Pushed 3y ago1 watchersCompare

[ Source](https://github.com/slavaWins/mathsolutionfinder)[ Packagist](https://packagist.org/packages/slavawins/mathsolutionfinder)[ RSS](/packages/slavawins-mathsolutionfinder/feed)WikiDiscussions master Synced today

READMEChangelog (2)DependenciesVersions (3)Used By (0)

[![](info/logo.jpg)](info/logo.jpg)

MathSolutionFinder
------------------

[](#mathsolutionfinder)

Кароч изи пакет для матиматической гавна комбинаторики помойных данных на пхп.

Установка из composer
---------------------

[](#установка-из-composer)

```
composer require slavawins/mathsolutionfinder

```

Простой пример использования
----------------------------

[](#простой-пример-использования)

Самое простое что я придумал это найти максимальное значение между двуми перемножиными числами. Понятно и так что ответ будет - два переменоженных числа.

```
use MathSolutionFinder\Library\MathSolutionFinder;

        $module = MathSolutionFinder::New()->SetMode()->Max()
            ->AddPropertyRange("one", 1, 100, 6)
            ->AddPropertyRange("two", 1, 5, 10)
            ->SetCallable(function ($data) {
                return $data['one'] * $data['two'];
            });

        $result = $module->Learn();
        dump($result);

```

Получится вот такой результат:

```
array:2 [
      0 => 500
      1 => array:2 [
        "one" => 100
        "two" => 5
      ]
]

```

Мы создаем класс. И говорим что хотим высчитать максимальную сумму. $module = MathSolutionFinder::New()-&gt;SetMode()-&gt;Max()

Далее с помощью: -&gt;AddPropertyRange("one", 1, 100, 6) Добавлем свойство которое нужно рассчитывать. Назвываться оно будет one и будет иметь значение от 1 до 100. 6 это сколько вариантов для этого числа нужно для рассчетов. Чем больше число, тем точнее результат. Но больше нагрузка.

Затем вываем -&gt;SetCallable(function ($data) { всё что внутри этой функции это рассчет, он будет выполнятся пока не переберутся все комбинации свойств.

Что бы понимать состояние рассчетов, можно воспользоваться такой функцией: dump($module-&gt;GetStatus());

```
array:4 [
    "bestResult" => 500
    "maxTry" => 60
    "lastTry" => 59
    "percent" => 98.33
]

```

Она покажет лучший получившийся результат bestResult. И maxTry - сколько попыток выполнено.

Пример поиска конкретного значения. Допустим мы хотим найти значения свойств чтоб на выходе оплучить число 320

```
        $module = MathSolutionFinder::New()->SetMode()->Similar(320.525)
            ->AddPropertyRange("one", 1, 100, 6)
            ->AddPropertyRange("two", 1, 5, 10)
            ->SetCallable(function ($data) {
                return $data['one'] * $data['two'];
            });

        $result = $module->Learn();

        dump($result);

```

С учетом шага мы получим такой результат: "bestResult" =&gt; 335

Увиличим количество шагов и разрешим использовать не целые числа:

```
    $module = MathSolutionFinder::New()->SetMode()->Similar(320.525)
        ->AddPropertyRange("one", 1.1, 100.2, 416)
        ->AddPropertyRange("two", 1, 5, 410)
        ->SetCallable(function ($data) {
            return $data['one'] * $data['two'];
        });

    $result = $module->Learn();

```

Тогда мы получим такой результат:
"bestResult" =&gt; 320.75769230769
"maxTry" =&gt; 170560

Да, было проверено 170560 комбинаций, чтоб решить простое уровнение)

Кэширование
-----------

[](#кэширование)

Если мы используем функцию лимит. То включится решим файлового кэширования. $module-&gt;Limit(10); При вызове Learn() будет проверяться 10 комбинаций. Данные сами сейвятся, между запросами. Можно в крон запустить или в консоли.

Кэширование и оптимизация рассчета
----------------------------------

[](#кэширование-и-оптимизация-рассчета)

Это самая крутая часть этого пакета, то ради его вообще качать можно. Этот пример позволяет запустить его несколько раз подряд, и он не будет начинать рассчеты с самого начала, будет продолжать с места где закончил. Каждый раз по 10 комбинаций проверять. Но кроме того у него есть функция $module-&gt;AnalizWeight(); Эта штука берет несколько сохраненных результатов, сравнивает их, и предполагает какие значения нужно подставить что бы получить результат ещё лучше. Для некоторых рассчетов это может сократить обучение в разы!

```
    $module = MathSolutionFinder::New()->SetMode()->Max()
        ->AddPropertyRange("one", 1.1, 100, 55)
        ->AddPropertyRange("two", 1, 50, 55)
        ->SetCallable(function ($data) {
            return $data['one'] * $data['two'];
        });

    $module->Limit(10);
    $result = $module->Learn();
    $optim = $module->AnalizWeight();

    dump($result);
    dump($optim);
    dump($module->GetStatus());

array:2 [
0 => 3878.8236363636
1 => array:2 [
"one" => 94.605454545455
"two" => 41
]
]
array:5 [
"randData" => array:2 [
"result" => 263.25272727273
"data" => array:2 [
"one" => 15.485454545455
"two" => 17
]
]
"bestData" => array:2 [
"result" => 3878.8236363636
"data" => array:2 [
"one" => 94.605454545455
"two" => 41
]
]
"delta" => array:2 [
"one" => 79.12
"two" => 24
]
"mathDeltaData" => array:2 [
"one" => 100
"two" => 50
]
"mathDeltaResult" => array:2 [
0 => 5000
1 => true
]
]
array:4 [
"bestResult" => 5000
"maxTry" => 3025
"lastTry" => 10
"percent" => 0.33
]
"ok"

```

Перевожу что написано в этих логах: ПОсле первой пыптке было найдено число 3878. (ПОтому что комбинации рандомно запускаются). Затем был запущен AnalizWeight и он предположил что нужно подставить числа 100 и 50. И сразу же режшил задачу. На 10 попытках из 3025. Такая оптимизация не будет давать сразу правильный ответ, но с помощью предположений сможет быстро найти не плохой вариант.

### Предсказание чисел

[](#предсказание-чисел)

```
dump("UP TRATE");
$data = [
'1 day' => 1001,
'2 day' => 1011,
'3 day' => 1010,
'4 day' => 1070,
'5 day' => 1072,
];
$result = PredictSolutionFinder::PredicatInfo($data);

dump($result);

dump("negatrive TRATE");
$data = [
    '1 day' => 1001,
    '2 day' => 971,
    '3 day' => 950,
    '4 day' => 961,
    '5 day' => 948,
];
$result = PredictSolutionFinder::PredicatInfo($data);

```

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

1225d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/36732624?v=4)[slavaWins](/maintainers/slavaWins)[@slavaWins](https://github.com/slavaWins)

---

Top Contributors

[![slavaWins](https://avatars.githubusercontent.com/u/36732624?v=4)](https://github.com/slavaWins "slavaWins (6 commits)")

### Embed Badge

![Health badge](/badges/slavawins-mathsolutionfinder/health.svg)

```
[![Health](https://phpackages.com/badges/slavawins-mathsolutionfinder/health.svg)](https://phpackages.com/packages/slavawins-mathsolutionfinder)
```

###  Alternatives

[joshrainwater/active-users

A Laravel Package for easily retrieving a list of active users and guests that are currently online.

9119.9k](/packages/joshrainwater-active-users)[facile-it/facile-coding-standard

Facile.it coding standard

10326.2k33](/packages/facile-it-facile-coding-standard)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
