rugleb / phpgpss
dev-master
2018-10-13 20:39 UTC
Requires
- php: ^7.2
- tightenco/collect: ^5.6
This package is not auto-updated.
Last update: 2024-09-29 05:14:56 UTC
README
phpGPSS - 一个用PHP编写的库,是GPSS建模语言的类似物。使用这个库,您可以轻松模拟和分析您的系统,了解您的流程有多有效。
例如,创建一个交通模拟器。
首先,我们定义事务 - 汽车
use GPSS\Foundation\Transact\Transact; /** * The Car class. */ class Car extends Transact { // }
接下来,定义一个将生成新的 事务(在我们的情况下是 汽车)的 生成器,在某个时间点
use GPSS\Foundation\Generator; /** * The CarGenerator class. * * @package App */ class CarGenerator extends Generator { /** * Get delay time. * * @return int */ public function getDelayTime(): int { return rand(5, 9) * 10; } /** * Get transact class name. * * @return string */ public function getTransactName(): string { return Car::class; } }
接下来,定义一个将处理由 汽车生成器 创建的 汽车 事务的 服务。
这里我们添加了一个 HasModel,它将允许我们使用 队列 将设备: RoadService 输入。
最重要的逗号是定义 handle 方法,其中包含服务处理事务的逻辑。
此外,我们还设置了设备的事务处理时间,使用 getDelayTime 方法。
use GPSS\Foundation\Service\Service; use GPSS\Foundation\Service\HasQueue; use GPSS\Foundation\Transact\Transact; /** * The RoadService class. */ class RoadService extends Service { use HasQueue; /** * Handle input transact. * * @param Transact $transact * @return mixed */ public function handle(Transact &$transact) { if ($this->isFree()) { return $this->seize($transact); } if ($this->isProcessing($transact)) { if ($this->canRelease($transact)) { return $this->release()->terminate($transact); } return $this; } return $this->queue($transact); } /** * Get delay time. * * @return int */ public function getDelayTime(): int { return rand(2, 8) * 10; } }
现在,一切准备就绪。剩下的就是创建一个 Model 实例并运行模拟。
请注意 Model 接受的 config。
此配置连接服务、事务和生成器。
require_once __DIR__ . '/vendor/autoload.php'; use App\Car; use App\RoadService; use App\CarGenerator; use GPSS\Foundation\Model; $config = [ 'map' => [ Car::class => RoadService::class, ], 'services' => [ RoadService::class, ], 'generators' => [ CarGenerator::class, CarGenerator::class, ], ]; $model = new Model($config); $model->simulate(200);