视频在线流量调控场景,使用MindOpt来优化

简介: 有线电视的时代已经过去,现在大家都是在线观看电影、短视频等。相信大家会发现大数据会根据个人的“喜好”推荐一些类似的视频内容,线上的流量是有限的,那么如何推荐,能保证视频播放量,还可以最大化视频播放总量呢?

有线电视的时代已经过去,现在大家都是在线观看电影、短视频等。相信大家会发现大数据会根据个人的“喜好”推荐一些类似的视频内容,线上的流量是有限的,那么如何推荐,能保证视频播放量,还可以最大化视频播放总量呢?

问题描述

在很多视频在线流量调控场景,需要在保证每个视频内容播放量的同时,使得播放总量最大化。如广告、通知、宣发内容等。而线上流量是有限的,且不同的宣发内容对用户的吸引力不一样。
我们把问题模型建立如下:


  • 决策优化变量:把视频内容 image.png (剧集、电影、综艺等)推荐给用户群 image.png 的概率 image.png image.png , 其中 image.png 为用户群集合, image.png 为视频内容集合。
  • 最大化目标:视频播放总量。 可以建模为点击率预测值( image.png ) * image.png 推荐给 image.png
    的概率( image.png
  • 参数 image.png 是将内容 image.png 推荐给用户 image.png 的预估点击率, image.png 是保量内容集合, image.png 则是内容 image.png 的播放量保量值。
  • 约束:为某些宣发内容的播放量保量


则整个问题建模为:

image.png

数据


假设有如下的数据(实际业务数据会更多)。


保量约束表:

item0

item1

item2

下界

0

0

1

上界


CTR 预估表:

user0

user1

item0

0.52

0.92

item1

0.31

0.93

item2

0.82

0.91

使用MindOpt求解器的API


直接采用求解器的API,需要查阅API文档来理解API的意思,没有建模语言可读性高。请参阅https://solver.damo.alibaba.com/doc/html/API%20reference/API-python/index.html来查看PythonAPI的使用说明。


关于Python的例子,在文档的5.建模与优化求解章节有Python的示例。这里是个LP的问题,我们可以参考:https://solver.damo.alibaba.com/doc/html/model/lp/linear%20optimization-python.html


下面我们分三种方式描述在本平台环境中的运行方法:


方法1:cell中直接输入代码运行


请运行下面cell中的代码,点击本窗口上面的播放△运行,或者摁shift+enter键运行:

# LP_4_distribution.py
from mindoptpy import *
if __name__ == "__main__":
    MDO_INFINITY = MdoModel.get_infinity()
    
    # 声明参数
    Broadcast_Req = \
    {
        # requirement: ( lower bound,   upper bound)
        "item0"        : (         0, MDO_INFINITY), 
        "item1"        : (         0, MDO_INFINITY), 
        "item2"        : (         1, MDO_INFINITY)
    }
    
    Show_req = \
    {
        # requirement: ( lower bound,   upper bound)
        "user0"        : ( 1,  1), 
        "user1"        : ( 1,  1)
    }
    
    CTR_value = \
    {
        #( user,   item ) : value
        ("user0","item0") : 0.52,
        ("user0","item1") : 0.31,
        ("user0","item2") : 0.82,
        ("user1","item0") : 0.92,
        ("user1","item1") : 0.93,
        ("user1","item2") : 0.91
    }
 
    # Step 1. Create a model and change the parameters.
    model = MdoModel()
    try:
        # Step 2. Input model.
        # Change to maximize problem.
        model.set_int_attr("MinSense", 0)
 
        # Add variables.
        var = {}
        for ctr_name_ui, ctr_data in CTR_value.items():
            var[ctr_name_ui] = model.add_var(0, 1, ctr_data, None, ctr_name_ui[0]+"-"+ctr_name_ui[1], False)
        # Add constraints.
        cons = {}
        # 播放量在范围内
        for req_item_name, req_data in Broadcast_Req.items():
            expr_i = MdoExprLinear()       
            for ctr_name_ui, ctr_data in CTR_value.items():
                if req_item_name == ctr_name_ui[1]:
                    expr_i.add_term(var[ctr_name_ui], ctr_data)
            cons["Each_Item_Broadcast_In_Range-"+req_item_name] = model.add_cons(req_data[0], req_data[1], expr_i, "Each_Item_Broadcast_In_Range-"+req_item_name)
       
        # 每个用户有视频看
        for req_user_name, req_data in Show_req.items():
            expr_u = MdoExprLinear()       
            for ctr_name_ui, ctr_data in CTR_value.items():
                if req_user_name == ctr_name_ui[0]:
                    expr_u.add_term(var[ctr_name_ui], 1)
            cons[ "Each_User_Total_X_Probability-"+req_user_name] = model.add_cons(req_data[0], req_data[1], expr_u, "Each_User_Total_X_Probability-"+req_user_name)
            
            
        # Step 3. Solve the problem and populate the result.
        model.solve_prob()
        model.display_results()
        time.sleep(1) #for print
        status_code, status_msg = model.get_status()
        if status_msg == "OPTIMAL":
            print("----\n")
            print("The solver terminated with an OPTIMAL status (code {0}).".format(status_code))
            print("目标函数总收益是: {0}".format(model.get_real_attr("PrimalObjVal")))
                
            print("原始解是:")
            for var_name,var_val in var.items():
                primal_soln = var_val.get_real_attr("PrimalSoln")
                print(var_name,"   :   " ,primal_soln)
            
            print("对偶解是:")
            for cons_name,cons_val in cons.items():
                dual_soln = cons_val.get_real_attr("DualSoln")
                print(cons_name,"   :   " ,dual_soln)                
        else:
            print("Optimizer terminated with a(n) {0} status (code {1}).".format(status_msg, status_code))
    except MdoError as e:
        print("Received Mindopt exception.")
        print(" - Code          : {}".format(e.code))
        print(" - Reason        : {}".format(e.message))
    except Exception as e:
        print("Received exception.")
        print(" - Reason        : {}".format(e))
    finally:
        # Step 4. Free the model.
        model.free_mdl()

运行之后,得到如下结果:

Start license validation (current time : 01-MAR-2023 20:59:34).
License validation terminated. Time : 0.002s
Model summary.
 - Num. variables     : 6
 - Num. constraints   : 5
 - Num. nonzeros      : 12
 - Bound range        : [1.0e+00,1.0e+00]
 - Objective range    : [3.1e-01,9.3e-01]
 - Matrix range       : [3.1e-01,1.0e+00]
Presolver started.
Presolver terminated. Time : 0.000s
Simplex method started.
Model fingerprint: ==gZul3Z3V2dldnZ
    Iteration       Objective       Dual Inf.     Primal Inf.     Time
            0     1.76000e+00      0.0000e+00      1.0900e+00     0.00s    
            1     1.74604e+00      0.0000e+00      0.0000e+00     0.00s    
Postsolver started.
Simplex method terminated. Time : 0.003s
Optimizer summary.
 - Optimizer used     : Simplex method
 - Optimizer status   : OPTIMAL
 - Total time         : 0.004s
Solution summary.       Primal solution
 - Objective          : 1.7460439560e+00 
----
The solver terminated with an OPTIMAL status (code 1).
目标函数总收益是: 1.7460439560439562
原始解是:
('user0', 'item0')    :    0.0
('user0', 'item1')    :    0.0
('user0', 'item2')    :    1.0
('user1', 'item0')    :    0.0
('user1', 'item1')    :    0.8021978021978021
('user1', 'item2')    :    0.19780219780219788
对偶解是:
Each_Item_Broadcast_In_Range-item0    :    -0.0
Each_Item_Broadcast_In_Range-item1    :    -0.0
Each_Item_Broadcast_In_Range-item2    :    -0.021978021978021997
Each_User_Total_X_Probability-user0    :    0.838021978021978
Each_User_Total_X_Probability-user1    :    0.93


方法2:命令行直接运行.py文件


上面是直接在cell中运行所有的脚本,我们也可以建立个新文档,将Python代码存在LP_4_distribution.py文件。然后在Launcher中打开Terminal,执行python xx.py文件来运行。


您也可以下载本.py文件,在自己的电脑上安装MindOpt求解器,然后在自己电脑的环境运行。


Luancher可以点击左上角的+打方块打开,Terminal在最下方,如截图示意。打开的窗口可以拖动调整位置。

image.png

打开的窗口可以拖动调整位置。


然后在Terminal命令行里运行如下指令:


python src/model/LP_4_distribution.py


运行得到的结果同方法1:

image.png

方法3:cell magic


在Python内核时候,模式运行,如下面的cell中,命令行指令前面增加!来运行,请注意文件相对目录。

! python ./model/LP_4_distribution.py

运行得到的结果如同方法1:

image.png


求解结果

目标函数总收益是: 1.7460439560439562 代表总点击量预估为约1.75。

求解后变量的原始解是:
('user0', 'item2')    :    1.0                  代表将第2号视频播放给第0号用户的概率为1,

('user1', 'item1')    :    0.8021978021978021   代表将第1号视频播放给第1号用户的概率为0.8,

('user1', 'item2')    :    0.19780219780219788  代表将第2号视频播放给第1号用户的概率为0.2。

从结果上看,该分配方式,满足所有约束条件。

有兴趣的用户可以自行调节本例中涉及的参数,观察效果的变化。

# 该案例在云上建模平台已经发布,可直接复制运行>>

联系我们

钉钉:damodi

邮箱地址:solver.damo@list.alibaba-inc.com

相关文章
|
4月前
|
机器学习/深度学习 人工智能 开发框架
智能ai量化高频策略交易软件、现货合约跟单模式开发技术规则
该项目涵盖智能AI量化高频策略交易软件及现货合约跟单模式开发,融合人工智能、量化交易与软件工程。软件开发包括需求分析、技术选型、系统构建、测试部署及运维;跟单模式则涉及功能定义、策略开发、交易执行、终端设计与市场推广,确保系统高效稳定运行。
|
5月前
|
缓存 负载均衡 算法
"揭秘!阿里云视觉智能开放平台人脸1vn搜索慢?轻松几招,QPS飙升,让你的应用快如闪电,用户体验秒变VIP级享受!"
【8月更文挑战第14天】在数字浪潮中,人脸识别技术广泛应用于安全监控到个性化服务等领域。阿里云视觉智能开放平台凭借其强大算法和服务模式成为行业翘楚。面对人脸1:Vn搜索响应慢的问题,不仅可通过增加QPS优化,还需从参数调整、缓存机制、并行处理及算法硬件升级等方面综合施策,以实现搜索速度与准确性的双重提升。
69 2
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。
|
8月前
|
存储 弹性计算 关系型数据库
100W用户、8000W流量在线贺卡应用架构如何优化?
100W用户、8000W流量在线贺卡应用架构如何优化?
|
数据采集 机器学习/深度学习 存储
量化高频交易系统策略模型开发搭建
量化高频交易系统策略模型开发搭建
|
算法 安全 数据挖掘
开源代码分享(6)—考虑实时市场联动的电力零售商鲁棒定价策略
提出了考虑实时市场联动的电力零售商鲁棒定价策略,以提升其抗风险能力。首先,考虑电力零售商日前定价、日前购电、实时能量管理、电动 车用户需求响应和电力市场统一出清价格等因素,建立了考虑电动汽车不确定性的电力零售商鲁棒定价模型。然后,通过线性化方法将鲁棒定价模型转化为两阶段混合整数规划,并通过列与约束生成算法迭代求解。最后,在 IEEE-33节点测试系统上进行了仿真,结果表明所提策略充分考虑了市场不确定性因素的影响,利用对冲机制降低了市场风险,提高了电力零售商的经营效率。
|
算法 搜索推荐
信息流短视频时长多目标优化
背景       信息流短视频排序目前使用的是基于CTR预估Wide&Deep排序模型。在此基础上继续一系列优化,通过引入相关性信号、体感信号、多场景的样本融合、高层排序模型取得了不错收益。       信息流短视频模型优化可分为两部分优化: 感知相关性优化——点击模型以优化(CTR/CLICK为
7885 0
|
机器学习/深度学习 人工智能 算法
大厂技术实现 | 爱奇艺短视频推荐业务中的多目标优化实践 @推荐与计算广告系列
短视频是当前互联网最热门的业务之一,聚集了巨大的互联网用户流量,也是各大公司争相发展的业务领域。作为主要营收业务方向,短视频方向的推荐算法也日新月异并驱动业务增长,本期我们看到的是爱奇艺的短视频频道下,推荐多任务算法应用实践路径与落地方案。
4833 9
大厂技术实现 | 爱奇艺短视频推荐业务中的多目标优化实践 @推荐与计算广告系列
|
数据采集 分布式计算 关系型数据库
离线计算-国内查询转换率|学习笔记
快速学习离线计算-国内查询转换率
188 0

热门文章

最新文章

下一篇
开通oss服务