ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2591|回复: 5

[求助] 规划中为何有的约束加不进去,难倒是EXCEL的规划算法有误?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-29 13:00 | 显示全部楼层 |阅读模式
本帖最后由 zhyj_88 于 2012-7-29 13:02 编辑

大家可以看一下附件和图片,不知为何第二个约束没有加进去?难道是规划函数有问题?
附程序代码:
  1. Option Explicit
  2. Private Sub 清空规划原始数据_Click()
  3.     Dim Rng As Range
  4.     With ActiveSheet
  5.         Set Rng = .Range("B6:K7")
  6.         Set Rng = Union(Rng, .Range("L7"))
  7.         Set Rng = Union(Rng, .Range("B9:M18"))
  8.         Rng.ClearContents
  9.     End With
  10.     Set Rng = Nothing
  11. End Sub

  12. Private Sub 规划求解_Click()
  13.     Dim i, ExistSolver, RelRng As Range
  14.     ExistSolver = False
  15.     For i = 1 To ThisWorkbook.Application.VBE.VBProjects.Count
  16.         If ThisWorkbook.Application.VBE.VBProjects(i).Name = "SOLVER" Then ExistSolver = True: Exit For
  17.     Next i
  18.     If Not ExistSolver Then MsgBox "没有加载SOLVER.XLAM 程序退出!", 64: Exit Sub
  19.     ExistSolver = False
  20.     For i = 1 To ThisWorkbook.VBProject.References.Count
  21.         If ThisWorkbook.VBProject.References(i).Name = "SOLVER" Then ExistSolver = True: Exit For
  22.     Next i
  23.     If Not ExistSolver Then MsgBox "没有引用SOLVER.XLAM 程序退出!", 64: Exit Sub
  24.     With Worksheets("线性规划")
  25.         SolverReset
  26.         SolverOptions Precision:=0.00001, AssumeLinear:=True, AssumeNonNeg:=True
  27.         For i = 1 To WorksheetFunction.CountA(.Range("L9:L18"))
  28.             Set RelRng = .Range("L9").Offset(i - 1, 0)
  29.             If RelRng.Value = "≤" Then
  30.                 SolverAdd cellRef:=.Range("N9").Offset(i - 1, 0), relation:=1, formulaText:=.Range("M9").Offset(i - 1, 0).Value
  31.             ElseIf RelRng.Value = "=" Then
  32.                 SolverAdd cellRef:=.Range("N9").Offset(i - 1, 0), relation:=2, formulaText:=.Range("M9").Offset(i - 1, 0).Value
  33.             ElseIf RelRng.Value = "≥" Then
  34.                 SolverAdd cellRef:=.Range("N9").Offset(i - 1, 0), relation:=3, formulaText:=.Range("M9").Offset(i - 1, 0).Value
  35.             Else
  36.                 MsgBox "第" & CStr(i) & "个约束条件发生错误 程序退出!", 64: Exit Sub
  37.             End If
  38.         Next i
  39. '        SolverOKdialog setCell:=.Range("N7"), maxMinVal:=2, byChange:=.Range("B6:K6")
  40.         SolverOKdialog setCell:=.Range("N7"), maxMinVal:=2, byChange:=.Range("B6:K6")
  41.         SolverSolve userFinish:=True
  42.         SolverFinish KeepFinal:=1
  43.     End With
  44.     Set RelRng = Nothing
  45. End Sub

复制代码



4.GIF

线性规划.rar

37.1 KB, 下载次数: 45

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-29 17:26 | 显示全部楼层
版主是否可以看一下这个问题呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-29 17:36 | 显示全部楼层
试了一下至少十个其他数据,均可得到正确解,唯独这个数据却无法将第二个约束加入到模型中去,太诡异了。请高手看一下。

TA的精华主题

TA的得分主题

发表于 2012-7-29 22:22 | 显示全部楼层
本帖最后由 灰袍法师 于 2012-7-29 22:28 编辑

不是第二个约束加不进去,而是 N10 这个单元格加不进去
鬼才知道为什么
你用其它列就可以了
哎,我越来越感觉 规划求解 一无是处了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-29 22:41 | 显示全部楼层
本帖最后由 zhyj_88 于 2012-7-29 22:55 编辑
灰袍法师 发表于 2012-7-29 22:22
不是第二个约束加不进去,而是 N10 这个单元格加不进去
鬼才知道为什么
你用其它列就可以了


第二个约束是在N10中体现的,关键是用其他数据为何N10又能加进去呢?
迷惑中。。
在对话框中手动加入第二个约束后,仍能正确求解。但天知道规划模型为何掉了一个约束?

TA的精华主题

TA的得分主题

发表于 2019-5-30 18:17 | 显示全部楼层
可以回帖吗?我发现是控件问题,很奇葩的一个现象  删除所有控件 运行OK 原理不清楚
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-19 18:41 , Processed in 0.039667 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表