我试图解决的问题如下。服务器拥有一个可以启用或禁用的视频编码器池(每个编码器具有不同的设置并导致服务器上的负载不同)。所有客户端都需要连接到其中一个编码器,但一个编码器可以容纳多个客户端。目标是客户端连接到适合其比特率容量的编码器(因此,发送与客户端可以处理的比特率大致相同的编码器是该客户端的“好”编码器)。
这是一个相当简单的线性问题,目标函数可以描述如下
其中是一个实用程序,当客户端被分配一个“好”编码器时,它是一个高实用程序,而是一个二进制变量,如果客户端 i 连接到服务器 j,则为 1,否则为 0。
其中一个约束当然是每个客户端只能连接到 1 个编码器的约束。
现在的问题是还有一个约束,即所有启用的编码器的负载总和不能大于服务器的最大负载。启用的编码器是连接到至少 1 个客户端的编码器。因此,每个至少有一个的编码器都被启用,并在服务器上带来额外的负载。因此,约束是启用的编码器的所有这些的总和应该小于服务器上的最大负载。我将其转换为约束的方式是:
例如,如果编码器连接到至少一个客户端,则该编码器的中的至少一个将为 1,因此最大项将等于 1,并且编码器贡献给总和。如果没有客户端连接到编码器,则最大项将等于 0,并且此编码器不会对总和做出贡献。这正是我需要的行为。
我的问题:是否真的有必要以这种方式编写最后一个约束(使用引入非线性的 max 运算符)?或者我是否忽略了某些东西,是否可以以更简单/线性的方式编写此约束。
如果不可能以线性方式编写它,我可以使用哪个优化框架或工具箱来实现和解决这个问题?
谢谢!