问题我有 n 个作业要在 P 秒内安排在无限数量的机器上,这些机器之间存在依赖关系,即对于每个作业,都有一组作业,只有在该作业完成后才能安排这些作业。在任何机器上在第 jth 秒内调度第 ith 个作业的利润是 f(i,j),它是正数。
我的目标是通过在最多 P 秒内准确地安排每个作业一次来最大化总利润。
我们可以假设所有作业总是可以在 P 秒内调度。
一切都是预先知道的,即离线问题。
还有 0 <= f(i,j)="">=><= b="" 。对于所有="" i,="" j="">=>
并且依赖的数量是 O(n)。
这个问题容易吗? [可能是由于有限的约束]
我的方法
为简单起见,首先假设一项工作的利润与时间无关。
即 f(i,j) 对于所有 i 都独立于 j 并且仅依赖于 i。
然后任何适合 P 秒的拓扑排序都将起作用。
如果没有依赖性,那么我们也为每个工作选择最高的利润分配时间,这也很容易。
但问题是当工作的利润随时间而变化时,依赖关系,在这种情况下,我想不出任何通用算法。
我在处理作业之间的依赖关系时遇到了麻烦,是否有在线依赖单元任务调度算法的资源?
请分享任何可以帮助的想法...
更新:我添加了各种参数的界限,因为它们可能是分析问题所必需的。
最佳答案
这是一个动态规划问题。为简单起见,我们假设所有利润都是非负的。
将 F(i, j) 定义为调度第 i 的作业以及所有依赖它的事物(递归向下)在第 j 秒或之后,如果不可能,则为 -1。
如果
然后你的答案是所有作业 (如果没有无限的机器,这个问题会变成 np-hard...) 这是一个示例,说明如何使用您的问题对 MAX-SAT 方程进行建模,其中每个子句的所有项都未否定或所有项都被否定。 假设我们有 4 个 bool 变量 对于 F(i_1, j+1) 是 -1<,则>,则>J2F(i, j) 是 -1/code> 用于 i 的任何依赖项 i_1。否则为 (f(i, j) 加上 F(i_1, j+1)) 或 F(i, j+ 1).i 的 F(i, 0) 总和,没有依赖关系。
A、B、C 和 D。举个例子,假设我们想要为方程 (A && B) || 做最大的可满足性。 (!A && !C) || (!B && !C && !D) || (C && D)。 (其中 ! 表示非,&& 表示和,|| 表示或。)J1 必须在 J2 之前运行的作业,我们使用符号 J1 > J2。并分布在括号中,以便 J1 > (J2, J3) 意味着 J1) 是J2和J3`的依赖项。和J3` p>
现在为 bool 值建模,让我们设置 12 个作业。 A1 > A2 > A3、B1 > B2 > B3、C1 > C2 > C3 和 D1 > D2 > D3。那么作业 A2, B2, C2, D2 必须在时间 2 或 3 发生,并且 bool 值 A是“A2 发生在时间 2”这句话的真实性。对于其他 bool 值也是如此。
无论何时运行,所有这些作业都会获得 1 的利润。我们引入了 3 倍于 bool 值的作业,但到目前为止这很简单。
现在让我们为子句添加作业。如果这些作业在 2 或 3 秒内运行,则每个作业将获得 11 的利润,否则为 1 .因此,当您为 bool 值找到最大化为真子句数量的设置时,您将获得最大利润。
(A2, B2) > J1 模拟 (A && B) 的真值。
J2 > (A2, C2)) 模拟 (!A && !C) 的真值。
J3 > (B2, C2, D2) 模拟 (!B && !C && !D) 的真值。
(C2, D2) > J4 模拟(C && D)的真值。
这又是一个简单的转换,添加的作业数量等于子句的数量。
因此,我们正在对 MAX-SAT 问题与调度问题进行建模。但我们不能对所有这些进行建模。特别是我们没有办法用混合否定来模拟像 (A && !B) 这样的子句。因此,即使 MAX-SAT 是 NP 难的,这个受限版本也可能不是。然而 MAX-SAT 的其他受限版本,例如 MAX-2SAT,往往是 NP 难的,我的直觉是这个也是。
但要证明或反驳这种直觉,您应该在更合适的论坛上提问。点赞https://cs.stackexchange.com/ .
关于c++ - 最大化调度具有依赖关系的单元任务的利润,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343038/
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是: