Questions tagged «optimization»

有关需要从一组可用替代方案中选择最佳元素的问题以及解决方案。

1
矩阵熵的约束优化问题
我在(Shannon)矩阵熵一个约束优化问题。矩阵可以写成形式为的秩1矩阵之和其中是给定的归一化向量。排名第一的矩阵的系数是我们进行优化的未知数,它们必须大于零且总和为1。 A [ v i(小号û 米(e n t r (e i g (A ))))(sum(entr(eig(A))))\mathtt{(sum(entr(eig(A))))}一个AAv 我[ v一世vŤ一世][viviT][v_i\,v_i^T]v一世viv_i 用类似CVX的语法,问题如下:给定变量C(n )c(n)\mathtt{c(n)} 最小化小号ü 米(e n t r (e i g (A )))minimizesum(entr(eig(A)))\text{minimize} \qquad \mathtt{sum(entr(eig(A)))} 服从一个Σ ç一世C一世= ∑ c一世v一世vŤ一世= 1≥ 0subject toA=∑civiviT∑ci=1ci≥0\begin{align} \text{subject to} \qquad A &= \sum c_i v_i v_i^T\\ \sum c_i &= 1\\ …

1
利用线性约束最大化凸函数
最大化 f(x)服从 A x = bmaximize f(x)subject to Ax=b\text{maximize } f(\mathbf{x}) \quad\text{subject to } \mathbf{Ax} = \mathbf{b} 哪里 F(x)= ∑我= 1ñ1 + x4一世(∑ñ我= 1X2一世)2-------------⎷,f(x)=∑i=1N1+xi4(∑i=1Nxi2)2,f(\mathbf{x}) = \sum_{i=1}^N\sqrt{1+\frac{x_i^4}{\left(\sum_{i=1}^{N}x_i^2\right)^2}}, x =[ x1个,X2,。。。,Xñ]Ť∈ [Rñ× 1x=[x1,x2,...,xN]T∈RN×1\mathbf{x} = [x_1,x_2,...,x_N]^T \in \mathbb{R}^{N\times 1}和。甲 ∈ ř中号× NA∈RM×N\mathbf{A} \in \mathbb{R}^{M\times N} 我们可以看到是凸的,形式为。还可以证明在是有界的。我知道,凸极大化问题通常是NP难的。√Fff f[ √1 + ÿ2-----√1+y2\sqrt{1+y^2}Fff[ 2–√,2 ][2,2][\sqrt{2}, 2] …

2
如何对仿真器输入优化问题进行分类,应该使用哪种算法进行处理?
由于问题的性质,我必须包括许多背景信息(因为我的问题是:如何缩小此范围?)也就是说,据我所知,可以总结为: 有哪些方法可以在极大的组合搜索空间中找到局部最优值? 背景 在工具辅助的超级游戏社区中,我们希望为视频游戏机或仿真器提供特制的(不是实时生成的)输入,以最大程度地减少成本(通常是完成时间)。这是目前做的方法是通过玩游戏帧一帧,并确定各帧的输入,经常重做多次运行的部分(例如,最近公布的运行塞尔达传说:时之笛有总共198,590次重试)。 使这些运行达到其目标通常可以归结为两个主要因素:路线规划和遍历。前者比后者更具“创造力”。 路线规划是确定玩家应该整体导航以完成游戏的方式,并且通常是奔跑过程中最重要的部分。例如,这类似于选择使用哪种排序方法。世界上最好的气泡排序根本不会胜过100万个元素的快速排序。 然而,在追求完美的过程中,遍历(路线的执行方式)也是一个巨大的因素。继续类推,这就是实现排序算法的方式。如果没有非常具体的输入帧,甚至无法执行某些路由。这是最繁琐的工具辅助过程,因此完成完整生产的过程要花费数月甚至数年。对于人类而言,这不是一个困难的过程,因为它可以尝试对同一想法进行不同的变体,直到被认为是最好的,但是人类只能在注意力范围上尝试如此多的变体。在这里,将计算机应用于此任务似乎是正确的。 我现在的目标是尝试使Nintendo 64系统的遍历过程自动化。对于这个问题的搜索空间是远远太大用蛮力的方法来攻击。N64运行的n帧段具有2个30n可能的输入,这意味着仅30帧输入(每秒30FPS)就有2 900个可能的输入;测试这些潜在的解决方案是不可能的,更不用说整整运行两个小时了。 但是,我对尝试(或者甚至不想尝试)完整的全局全局优化没有兴趣。相反,在给定初始输入的情况下,我想近似某个运行特定段的局部最优值(对于某种半全局优化,则近似为n个局部最优值)。也就是说,给定一条路线和该路线的初始遍历:搜索该遍历的邻居以最大程度地降低成本,但不要退化为尝试所有可以解决问题的情况。 因此,我的程序应采用启动状态,输入流,评估函数,并通过使评估结果最小化来输出局部最优值。 当前状态 目前,我已经处理了所有框架。这包括通过仿真器的操作,设置和拆卸,配置等评估输入流。作为各种占位符,优化器是一种非常基本的遗传算法。它只是评估输入流的总数,存储/替换获胜者,并通过更改获胜者流来生成新的总数。这个过程一直持续到满足一些任意标准,例如时间或世代号。 注意,到目前为止,该程序最慢的部分将是对输入流的评估。这是因为这涉及到模拟n帧游戏。(如果有时间,我要编写自己的仿真器来提供此类功能的钩子,但是现在,我剩下的工作是合成消息并为来自另一个进程的现有仿真器修改内存。)在我的主计算机上,相当现代,评估200帧大约需要14秒。因此,我更喜欢一种算法(给定的选择),该算法可以最大程度地减少函数求值的次数。 我在框架中创建了一个同时管理模拟器的系统。这样,我可以立即以线性性能尺度评估多个流,但是实际上,在系统性能下降之前,正在运行的仿真器的数量只能是8到32(并且实际上是在推动它)。这意味着(根据选择),可以在进行评估时执行处理的算法将非常有益,因为优化器可以在等待评估时进行一些繁重的工作。 作为测试,我的评估功能(对于游戏Banjo Kazooie)是每帧求出从玩家到目标点的距离之和。这意味着最佳解决方案是尽可能快地接近该点。仅将突变限制在模拟摇杆上,就花了一天的时间才得到一个好的解决方案。(这是在我实现并发之前。) 添加并发之后,我启用了A按钮按下的突变,并在需要跳转的区域执行了相同的评估功能。在运行24个仿真器的过程中,从最初空白的输入流中花费了大约1个小时才能达到目标,但可能要花几天时间才能达到接近最佳的水平。 问题 我面临的问题是,我对数学优化领域的了解不足,无法知道如何正确地对我的优化问题建模!例如,我可以大致遵循Wikipedia上描述的许多算法的概念,但是我不知道如何对问题进行分类或如何为该类别选择最新的算法。 据我所知,我在一个非常大的邻里中遇到一个组合问题。最重要的是,评估功能非常不连续,没有梯度,并且有很多平稳状态。而且,约束不多,但如果可以解决问题,我很乐意添加表达约束的能力;我想允许指定例如不应使用“开始”按钮,但这不是一般情况。 题 所以我的问题是:如何建模?我要解决哪种优化问题?我应该使用哪种算法?我不害怕阅读研究论文,所以让我知道我应该阅读什么! 直觉上,遗传算法不可能是最好的,因为它似乎并没有真正学习。例如,如果按Start(开始)似乎总是使评估变得更糟(因为它使游戏暂停),那么应该有一些设计师或大脑可以学习:“在任何时候按Start都是没有用的。” 但是,即使达到这个目标也不是那么简单,因为有时按启动是最佳选择,例如在Super Mario 64中所谓的“暂停向后跳远” !在这里,大脑必须学习一个更为复杂的模式:“按下开始是没有用的,除非玩家处于这种非常特定的状态,并且会继续进行某些按键组合。” 似乎我应该(或机器可以学习)以更适合修改的其他方式表示输入。每帧输入似乎太细粒度了,因为真正需要的是“动作”,它可能跨越多个帧...但是许多发现是逐帧进行的,因此我不能完全排除它(上述暂停向后长跳需要帧级精度)。似乎也可以串行处理输入,这是可以利用的事实,但我不确定如何使用。 目前,我正在阅读(反应式)禁忌搜索,超大规模邻域搜索,基于教学的优化以及蚁群优化。 除了随机遗传算法,这个问题是否真的很难解决?还是实际上是一个很久以前解决的琐碎问题?感谢您的阅读,并预先感谢您的任何答复。

2
对元素进行排序,以使某些元素不会介于其他元素之间
给定一个整数和一组不同的整数的三元组 找到一种算法,该算法可以找到集合的置换,使得 或正确确定不存在这种排列。非正式地,我们想对数字1到重新排序;每个三元组在表示必须之前出现在新的顺序,但不能之间出现nnnS⊆{(i,j,k)∣1≤i,j,k≤n,i≠j,j≠k,i≠k},S⊆{(i,j,k)∣1≤i,j,k≤n,i≠j,j≠k,i≠k},S \subseteq \{(i, j, k) \mid 1\le i,j,k \le n, i \neq j, j \neq k, i \neq k\},ππ\pi{1,2,…,n}{1,2,…,n}\{1, 2, \dots, n\}(i,j,k)∈S⟹(π(j)&lt;π(i)&lt;π(k)) ∨ (π(i)&lt;π(k)&lt;π(j))(i,j,k)∈S⟹(π(j)&lt;π(i)&lt;π(k)) ∨ (π(i)&lt;π(k)&lt;π(j))(i,j,k) \in S \implies (\pi(j)<\pi(i)<\pi(k)) ~\lor~ (\pi(i)<\pi(k)<\pi(j))nnn(i,j,k)(i,j,k)(i,j,k)SSSiiikkkjjjiii和。kkk 例子1 假设且。然后n=5n=5n=5S={(1,2,3),(2,3,4)}S={(1,2,3),(2,3,4)}S = \{(1,2,3), (2,3,4)\} π=(5,4,3,2,1)π=(5,4,3,2,1)\pi = (5, 4, 3, 2, 1)是不有效的置换,由于,但。(1,2,3)∈S(1,2,3)∈S(1, 2, 3)\in Sπ(1)&gt;π(3)π(1)&gt;π(3)\pi(1) > …

6
Big-O-Notation的常规运行时有变化吗?
有多个ØOO表示法,例如O (n )O(n)O(n)或Ø (ñ2)O(n2)O(n^2)等。我想知道,实际上是否存在诸如ø (2 Ñ2)O(2n2)O(2n^2)或O (对数ñ2)O(log⁡n2)O(\log n^2),或者在数学上是不正确的。 或者说可以将ø (5 Ñ2)O(5n2)O(5n^2)为ø (3 Ñ2)O(3n2)O(3n^2)吗?我不能也不需要弄清楚运行时,也不需要改善任何事情,但是我需要知道这是否是您如何在现实中描述您的功能。

2
寻找最佳订购
我遇到了这个问题,正在努力寻找解决方法。任何想法将不胜感激! 假设我们给出一个矩阵{−1,0,1}n × k{−1,0,1}n × k\{-1, 0, 1\}^{n\ \times\ k} ,例如 ⎡⎣⎢⎢⎢⎢⎢⎢1−10−11001−101010000010−11−11−1⎤⎦⎥⎥⎥⎥⎥⎥[1010−1−100010110−1−1−10111000−1]\begin{bmatrix} 1 & 0 & 1 & 0 & -1 \\ -1 & 0 & 0 & 0 & 1 \\ 0 & 1 & 1 & 0 & -1 \\ -1 & -1 & 0 & 1 & …

1
如何最大限度地
我看到了很多算法问题,这些问题总是导致以下问题: 你有一个整数数组h[1..n]≥0H[1 ..ñ]≥0h[1..n]\geq 0,则需要找到i,j一世,Ĵi,j这样最大化(h[j]−h[i])(j−i)(H[Ĵ]-H[一世])(Ĵ-一世)(h[j]-h[i])(j-i)中O(n)Ø(ñ)O(n)时间。 显然,O(n2)Ø(ñ2)O(n^2)时间解决方案是考虑所有对,但是,有什么方法可以使的表达式最大化,O(n)Ø(ñ)O(n)而又不了解性质hHh吗? 我想到了一个想法是修复jĴj,那么我们需要找到i∗一世∗i^*从11个1到j−1Ĵ-1个j-1等于argmaxi{(h[j]−h[i])(j−i)}argmax一世{(H[Ĵ]-H[一世])(Ĵ-一世)}\text{argmax}_i\{(h[j]-h[i])(j-i)\}或argmaxi{h[j]j−h[j]i−h[i]j+h[i]i}argmax一世{H[Ĵ]Ĵ-H[Ĵ]一世-H[一世]Ĵ+H[一世]一世}\text{argmax}_i\{h[j]j-h[j]i-h[i]j+h[i]i\},由于jĴj是固定的,因此我们需要argmaxi{−h[j]i−jh[i]+ih[i]}argmax一世{-H[Ĵ]一世-ĴH[一世]+一世H[一世]}\text{argmax}_i\{-h[j]i-jh[i]+ih[i]\}。 但是,我看不出要摆脱内部jĴj依赖项的方法。有什么帮助吗?


1
寻找最长的重复子序列
给定字符串,我想找到最长的重复(至少两次)子序列。也就是说,我想找到一个字符串,它是的子序列(不一定是连续的),使得。也就是说,是一个字符串,其一半连续出现两次。请注意,是的子序列,但不一定是子字符串。ssswwwsssw=w′⋅w′w=w′⋅w′w=w' \cdot w' wwwwwwsss 例子: 对于“ ababccabdc”,它将是“ abcabc”,因为“ abc” =“ abc”和“ abc”在“ ababccabdc”中(至少)出现了两次(至少)。 对于“ addbacddabcd”,一个选项为“ dddd”,因为“ dd”出现两次(我不能多次使用相同的字母,但是这里我有4个“ d”,所以还可以),但其值为4。我可以找到更好的一个长度8:“ abcdabcd”,因为“ abcd”是“ addbacddabcd”的子字符串,该子字符串出现两次。 我有兴趣找到最长的重复子序列。这也称为“找到最长/最大的平方”,但我读过许多文章,其中为子字符串而不是子序列定义了平方。 我可以轻松地使用蛮力算法,该算法通过迭代字符串中的断点的所有选项来获取,然后我将在两个字符串中寻找最大/最长的公共子序列,但是使用动态编程技术每次检查将花费,因此整个时间将是。我发现了最长公共子序列更有效的算法,该算法采用,因此运行时间将为。O(n3)O(n3)O(n^3)O(n2)O(n2)O(n^2)O(n3)O(n3)O(n^3)O(n2logn)O(n2log⁡n)O(\frac{n^2}{\log n})O(n3logn)O(n3log⁡n)O(\frac{n^3}{\log n}) 我正在寻找一种更有效的算法来解决最长重复子序列问题。也许我对所有断点进行迭代的想法浪费了太多时间,并且可以减少为更少的迭代。或者也许以不同的态度解决这个问题。 我搜索了许多期刊和以前的问题,发现的大多数结果都与子字符串有关,而不是与子序列有关。 我还读到可以使用后缀树来完成此操作,但这也与子字符串有关,我不确定是否可以将这种想法扩展到子序列。 我正在寻找可以在时间中运行的解决方案。如果在时间上存在一个会更好(我不确定是否存在)。O(n2)O(n2)O(n^2)O(n⋅logn)O(n⋅log⁡n)O(n \cdot \log n)

3
如何使用图论解决法国国家档案馆的编排问题?
晚上好!我实际上是在法国国家档案馆实习,遇到一种想用图形解决的情况... 一,尘土飞扬的情况 我们希望根据图书的高度优化图书馆图书的排列方式,以最大程度地减少归档成本。书的高度和厚度是已知的。我们已经按照高度升序排列了这些书(我不知道这是不是最好的东西,但是...就是这样做的方法)。了解了每本书的厚度后,我们可以为每个类确定其排列所需的厚度,将其称为(例如,高的书的总厚度)。H i L i H i = 23H1个,小时2,… ,HñH1,H2,…,HnH_1,H_2,\dots,H_nH一世HiH_i大号一世LiL_iL i = 300H一世= 23ç 米Hi=23cmH_i = 23\,\mathrm{cm}大号一世= 300ç 米Li=300cmL_i = 300\,\mathrm{cm} 图书馆可以定制制造货架,指示所需的长度和高度(深度没有问题)。高度和长度货架的成本为 ,其中是固定成本,是每长度单位的货架成本。x i F i + C i x i F i C iH一世HiH_iX一世xix_iF一世+ C一世X一世Fi+CixiF_i+C_ix_iF一世FiF_iC一世CiC_i 需要注意的是高度的货架可以用来存储高度的书籍 与。我们希望将成本降到最低。^ h Ĵ Ĵ ≤ 我H一世HiH_iHĴHjH_jĴ ≤ 我j≤ij\leq i 我的老师建议我将此问题建模为寻路问题。该模型可能涉及索引为到个顶点。我的导师建议我计算现有条件,每个边的含义以及如何计算与边相关的评估。其他解决方案和见解也可以。0 n v …

1
最重的平面子图
考虑以下问题。 给定:边缘上具有真实非负权重的完整图形。 任务:找到最大权重的平面子图。(在所有可能的平面子图中为“最大”。) 注意:最大权重子图将是一个三角剖分;如果完整图在个顶点上,则它将具有m = 3 n - 6个边。ññnm = 3 n − 6米=3ñ-6m=3n-6 问题:解决此问题的最佳算法是什么?它的时间复杂度是多少?

1
固定长度的类似决策树的特征选择,以最大程度地降低平均搜索性能
我有一个复杂的查询用于搜索数据集以查找。每个查询花费平均时间因此线性搜索的总时间为。我可以将查询分解为更简单的子查询q_i并找到 和其中。每个子查询计算速度都快得多,因此总的来说,找到然后使用来找到更快。QQQSSS吨吨&CenterDot;&| S | ħ 约 = { 小号∈ 小号| &ForAll; q Ĵ(小号)为真} ħ 确切 ⊆ ħ 约q 我ħ 约 Q ħ 确切Hexact={s∈S∣where Q(s) is True}Hexact={s∈S∣where Q(s) is True}H_\text{exact} = \{s \in S \mid \text{where $Q(s)$ is True}\}tttt⋅|S|t⋅|S|t\cdot |S|Happrox={s∈S∣∀qj(s)is True}Happrox={s∈S∣∀qj(s)is True}H_\text{approx} = \{s\in S \mid \forall q_j(s) \text {is True}\}Hexact⊆HapproxHexact⊆HapproxH_\text{exact}\subseteq …

2
分支定界说明
我对分支和绑定算法进行了测试。我从理论上理解了该算法的工作原理,但是找不到能说明该算法如何实际实施的示例。 我发现了一些例子,如这一个 ,但我仍然感到困惑了。我也寻找旅行商的问题,我听不懂。 我需要的是一些问题,以及如何通过使用分支定界法来解决这些问题。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.