A DMN (Decision Model and Notation) Implementation for Python
Project description
bkflow-dmn: A DMN(Decision Model Notation) library for Python
简介
bkflow-dmn 是一款基于 Python 的 DMN(Decision Model Notation) 库,使用 FEEL(Friendly Enough Expression Language) 作为描述语言,可以作为决策引擎,用于解决实际业务场景中的决策问题。
Quick Start
1. 安装依赖
$ pip install bkflow-dmn
2. 构造决策表数据
目前,bkflow-dmn 支持单表决策,支持通过 python 字典对决策表进行描述,示例如下:
decision_table = {
"title": "decision table", # 表格标题,目前没有实际用途
"hit_policy": "Unique", # 命中策略
"inputs": { # 输入表
"cols": [{"id": "score"}, {"id": "sex"}], # 列描述
"rows": [ # 行对应的值
["[0..70]", '"boy"'],
["(70..80]", '"boy"'],
["(80..90]", '"boy"'], # 对于实际场景中,如果希望【单行表示多列表达式】,则直接用字符串类型进行描述,形如 'score in (80..90] and sex="boy"'
["(90..100]", '"boy"'],
["[0..60]", '"girl"'],
["(60..70]", '"girl"'],
["(70..80]", '"girl"'],
["(80..100]", '"girl"'],
],
},
"outputs": { # 输出表
"cols": [{"id": "level"}], # 列描述
"rows": [ # 行对应的值
['"bad"'],
['"good"'],
['"good+"'],
['"good++"'],
['"bad"'],
['"good"'],
['"good+"'],
['"good++"'],
],
},
}
其中,输入表默认会将单元格中的表达式作为整体表达式进行真值判定,同时支持一些快捷填写方式(仅在未使用【单行表示多列表达式】的情况下):
| 快捷填写方式 | 补全后表达式(假设列名为 x) |
|---|---|
| ">=10" | "x>=10" |
| ">10" | "x>10" |
| "<=10" | "x<=10" |
| "<10" | "x<10" |
| "[1..2]" | "x in [1..2]" |
| "(1..2]" | "x in (1..2]" |
| '"boy"' | 'x="boy"' |
| "1" | "x=1" |
| "1.2" | "x=1.2" |
| "-1" | "x=-1" |
| "-2.3" | "x=-2.3" |
| "true" | "x=true" |
| "false" | "x=false" |
| "null" | "x=null" |
3. 调用函数进行决策
from bkflow_dmn.api import decide_single_table
facts = {"score": 10, "sex": "boy"} # 输入表的列数据和上下文
result = decide_single_table(decision_table, facts, strict_mode=True) # [{"level": "bad"}]
如需进行多表决策,目前可结合 流程引擎 bamboo-engine 实现。
4. 支持的命中策略
| 命中策略 | 说明 |
|---|---|
| Unique | 唯一命中, strict_mode 下需要保证只有一条规则命中 |
| Any | 任意命中,strict_mode 下需要保证有命中结果且命中的结果是唯一的 |
| First | 第一命中, strict_mode 下需要保证有规则命中 |
| Priority | 优先级命中,以输出作为排序优先级,strict_mode 下需要保证有规则命中,且优先级排序结果唯一 |
| RuleOrder | 多规则命中策略,按照规则定义顺序输出 |
| OutputOrder | 多输出命中策略,按照输出顺序排序输出 |
| Collect | 多输出命中策略,输出所有符合的结果 |
| Collect(Sum) | 多输出命中策略,按照输出值求和 |
| Collect(Max) | 多输出命中策略,按照输出值求最大 |
| Collect(Min) | 多输出命中策略,按照输出值求最小 |
| Collect(Count) | 多输出命中策略,按照输出值求个数 |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bkflow_dmn-0.2.0.tar.gz.
File metadata
- Download URL: bkflow_dmn-0.2.0.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.18 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a3604fe2d8d0c7484df30a7b15630e02a0a53915d894cba0f7bc27d12d634bb
|
|
| MD5 |
b139b2b475f441d08df3b6042af8a445
|
|
| BLAKE2b-256 |
62890067df5633a942aee605ddd830b1b105aaaa75d4fb537ab70e169491ff11
|
File details
Details for the file bkflow_dmn-0.2.0-py2.py3-none-any.whl.
File metadata
- Download URL: bkflow_dmn-0.2.0-py2.py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.18 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec2cadca74bf01b012f579802be4304d154cebd5efc74f35965ffc4b57ba57ee
|
|
| MD5 |
d14ac458d56d723f2d03957888240b3b
|
|
| BLAKE2b-256 |
93cd2497f7b36687a8a96a567f016f3c87311aee06a5c36afad0fb5462d3d751
|