系列如此之远
算法
现在, 我们将讨论实现最佳价格和分配的算法。该算法由两部分组成。第1部分涉及寻找最佳价格向量, 第2部分涉及找到与第1部分中找到的最优价格向量相对应的最优分配。
第1部分: 最优价格和相应的分配
定义
首先, 定义成本函数:
c (p): = pt * s +{1,.., n} v i(p)
考虑以前为 i = 1、…、n 定义的 qi(p)。让 qi1 (p) 定义为 k 维向量, 其中 j-th 条目为 1, 如果且仅当在 qi(p) 中存在一个元素, 其中 j = 1…, k。换句话说, 如果 qi(p) 的 jth 条目为 0, 则对于 q i (p) 中的每个元素, jth 条目必须为 0;如果 qi1(p) 的 jth 条目为 1, 则对于 qi(p) 中的至少一个元素, 则 j-th 条目必须为1。
第1部分从0的初始价格向量开始, 即 p = 0, 然后在每个迭代步骤中找到一个新的价格向量, 建立在前一个向量的基础上, 最大限度地减少 c (p)。在每一步, 新构造的价格向量保证不低于前一步新构造的和以前的价格向量相等, 达到了最优价格 po.随着 po , 我们还得到 qi1 (p), i = 1,…, n, 我们称之为最优分配。如果 qi1(p o) 的 jth 条目 = 0, 则代理 i 将不会被分配任何资源类型 j 的单位。另一方面, 如果 qi1(p)的 jth 条目 = 1, 那么代理 i 可以在算法的第2部分中分配一些资源类型 j 的单位, 尽管不一定。
定义ω作为元素为0或1的所有 k 维矢量的集合。例如, 以下向量都是ω的成员:
[0 0..。0]t, [1 0..。0]t, [0 1..。0]t, [1 1..。0]t,…, [1 1..。1]t
设置ω应被视为在给定的价格向量上所有可能的1单位价格上涨。
对于第1部分, 我们首先需要计算最小 ω c (p + ω)。
计算最小 ω (p + ω)
-
初始化标量, 最小值: =-1。
-
初始化 k 维向量, ptmp : = null。
-
将名为 “分配” 的集初始化为空集。
-
对于每个元件ω重复。(让表示元素。
-
定义 p: = ptmp +
-
计算 c (p)
-
如果最小 & lt; 0 或最小 & gt; c(p),则
-
最小值: = c(p)
-
分配: = {q1(p), q21 (p),…, qn1(p)}
-
ptmp : = p
-
-
结束如果
-
-
结束为
-
返回 ptmp (= min ω c (p + ω)) 和分配
第1部分
现在, 我们可以给出算法的第1部分.
-
初始化价格向量 p min: = [0 0..。0]t
- 初始化 k 维向量, pnew: = null。
-
将称为“优化分配”的集初始化为空集
而真正的重复
- 计算 p新: = minω c ( pmin + ω)
-
如果p min & lt; p新 /价格上涨
-
pmin : = p新
-
-
结束如果
-
否则, 分钟必须等于 p新, 因此价格不再上涨
- po : = p分钟
- 优化分配: =分配(从最小 (p分钟+) 的计算)
-
断开, 而
-
结束其他
结束时
因此, 一旦算法达到价格矢量不再增加的状态, 我们就得到了 po 为pmin , q i 1 (po) 为最优分配, i = 1,…, n。
第2部分: 与最优价格相对应的拨款
第1部分中的最优价格 po和最佳分配是第2部分的输入, 其目标是找到最佳分配。
回想一下, 优化分配是由与代理1、2、…、n 相对应的 n 元素组成的有序集。每个这样的元素都是维度 k 的向量, 如果在特定价格下, 如果不应该向代理分配资源类型 j, 则应将资源类型 j 分配给代理, 如果在特定价格下可以分配资源类型 j, 则可以进行某种分配。, 但不一定是, 使代理。
让优化分配ij, i,…, n, j = 1,…, k, 表示“优化分配” 的i-th 元素中的 j-th 条目, 即与 i-th 代理相对应的 j-th 资源类型的条目。请注意,每个 i, j 的优化分配ij {0, 1}。也让 po j表示p o、j = 1、…、k 的 j-th 元素, 即 j-th 资源类型的最优价格。
第2部分是为资源类型逐一执行的。对于每个资源类型, 可用的供应将分配给对资源类型的出价高于该资源类型的设置价格的代理 (如果有) 进行优先排序的代理。
-
对于每个资源类型 j = 1,…, k, 定义初始供应量, zj: = s j
-
对于每个代理 i = 1,…, n 和每个资源类型 j = 1, k, 定义 allocij:= 0 为资源类型 j 的代理 i 的初始分配。
-
对于每个资源类型 j = 1,…, k 重复
-
对于每个代理 i = 1,…, n其中优化分配ij & gt; 0和您 ij > ; p o j
-
分配到代理单位的数量: = 分钟 (zj,l ij)
-
zj : = zj- , allocij: = allocij +
-
-
结束为
-
对于每个代理 i = 1,
-
, n其中优化分配ij & gt; 0
-
分配到代理单位的数量: = min (zj,l ij-allocij)
-
zj : = zj- , allocij: = allocij +
结束为
结束为
请注意, 有两个单独的循环遍历代理。第一个循环处理出价大于相应资源类型的设定价格的代理 (如果有)。因此, 这些代理人比其他人先得到他们的份额。第二个循环处理没有任何值优先级的代理。在结尾, xoij = allocij, i = 1,…, n, j = 1,…, k。
定义回顾
为方便读者, 本节列出了算法中的所有定义。
象征 | 描述 |
K | 资源类型的数量, & gt; 0。 |
n |
代理数, & gt; 0。 |
s: = [s1 s2 ..。sk]t |
每种资源类型的可用供应单位的向量, sj & gt; 0, j = 1,…, k。 |
乌伊杰 |
值系数指示代理 i 的资源类型 j, i = 1,…, n, j = 1,…, k;uij≥0 。 |
ui:= [ui1 ui1. .. |
剂 i、i = 1、…、n 的值系数向量。 |
lij |
指示代理 i 最多需要多少个资源类型 j 的单位;lij≥0 , i = 1,…, n, j = 1,…, k。 |
p: = [p1 p2 … pk]t |
p j≥0对应于资源类型 j = 1,…, k 的价格向量。 |
xi |
集所有 k 维非负整数向量代理, 我可以接受作为分配的一部分, 也称为消费集, i = 1,…, n;xi中的向量, 由 X 表示: = [xi1 x i1. x i1]t, 维度 j 对应于资源类型 j, 小于或等于 lij、j = 1、…、k。 |
ui(x)-p * x |
代理 i 的效用在价格 p, i = 1, |
.. n。
vi(p)
最大x x i {u i(x)-p * x}, 也称为最大实用程序代理, 我得到的价格 p,
i = 1,…, n。
qi(p)
xi的子集, 其中 q i (p) 的每个元素在价格 p 时达到最大效用,
i = 1,.., n 等效, qi(p) = arg最大 x x i i { u i(x)-p * x}
qi1(p)
对于 i = 1,…, n, 这是 k 维向量, 其中 j-t 条目是 1, 如果只有当存在
q i (p) 中的一个元素, 其中 jth 条目大于 0, j = 1,…, k。
po
xoij
与最优价格相对应的最优分配, i = 1,…, n, j = 1,…, k。它认为,
[xoo i1 x oi1 . xoi1]x i, i = 1,…, n。
c (p)
定义为 p t * s +{1,.., n} v i(p) 的特定成本函数
ω
元素为0或1的所有 k 维向量的集合。
表6。
这都是第2部分!当我们深入到一些代码时, 可以在明天进行调整!