Gekko 返回错误的成功解决方案

2023-12-29

以下代码返回Successful Solution Objective: 0.。但这不是最佳解决方案。最优解是-6。通过阅读其他问题,我认为这是在目标函数中使用非 Gekko 函数的问题,但我使用的唯一非 Gekko 函数是np.matmul. Does np.matmul使用 gekko 阵列?笔记sigma_post是一个 nxn numpy 单位矩阵。

m = GEKKO(remote=False)
m.options.max_iter=1000
#m.options.ipopt_integer_tol=1
#m.solver_options = ['minlp_integer_tol 50']
#m.solver_options = ['minlp_max_iter_with_int_sol 1000',
#                    'minlp_branch_method 1']
                    

N = 2
b = m.Array(m.Var,(N,n), lb=0, ub=1, integer=True)

for i in range(N):
    for j in range(n):
        if j in [qb_index_range[0], rb_index_range[0], wr_index_range[0]]:
            b[i][j].value = 1
        else:
            b[i][j].value = 0

print('b: ', b)

# CONSTRAINT: Each Lineup must be less than budget
z = np.array([None]*N)
for i in range(N):
    z[i] = m.Intermediate(sum(b[i, :]*list(info_df['cost'])))
    
m.Equations([z[i] <= budget for i in range(N)])


# CONSTRAINT: Each Lineup has one QB
z_1 = np.array([None]*N)
for i in range(N):
    z_1[i] = m.Intermediate(sum(b[i, qb_index_range[0]: qb_index_range[1]+1]))

m.Equations([z_1[i] == 1 for i in range(N)])


# CONSTRAINT: Each Lineup has one RB
z_2 = np.array([None]*N)
for i in range(N):
    z_2[i] = m.Intermediate(sum(b[i, rb_index_range[0]: rb_index_range[1]+1]))

m.Equations([z_2[i] == 1 for i in range(N)])


# CONSTRAINT: Each Lineup has one WR
z_3 = np.array([None]*N)
for i in range(N):
    z_3[i] = m.Intermediate(sum(b[i, wr_index_range[0]: wr_index_range[1]+1]))

m.Equations([z_3[i] == 1 for i in range(N)])

#OBJECTIVE: maximize with two lineups
sigma_1 = np.array([[None]*N for i in range(N)])
sig = np.matmul(np.matmul(b, sigma_post), b.T)

for i in range(N):
    for j in range(N):
        sigma_1[i][j] = m.Intermediate(sig[i][j])
        
        
m.Obj(-(sigma_1[0][0] + sigma_1[1][1]- 2*sigma_1[1][0]))

m.options.SOLVER = 1 

m.solve(debug=0)

编辑: 为了透明起见,理想情况下我关心的目标函数如下,但上面详细介绍的更简单的目标函数导致了问题,因此我决定开始在那里进行故障排除。以下目标投掷Warning: no more possible trial points and no integer solution Maximum iterations对于某些值mu but mu不存在于约束中。非常感谢您的任何建议!

pi = 3.14159
eps = 1.0E-6

def normal_cdf(x, m):
    return 1/(1+m.exp(-1.65451*x))
    
def normal_pdf(x, m):
    return (1/((2*pi)**(.5)))*m.exp((x**2)/2)
    
def theta(s, m):
    return m.sqrt(s[0][0]+s[1][1] - 2*s[0][1])

# OBJECTIVE: Maximize 
mu_1 = np.array([None]*N)
for i in range(N):
    mu_1[i] = m.Intermediate(np.matmul(b[i, :], mu))


inter = m.if2(theta(sigma_1, m)-eps, .5*mu_1[0]+.5*mu_1[1], 
             (mu_1[0]*normal_cdf((mu_1[0]-mu_1[1])/theta(sigma_1, m), m) + \
              mu_1[1]*normal_cdf((mu_1[1]-mu_1[0])/theta(sigma_1, m), m) + \
              theta(sigma_1, m)*normal_pdf((mu_1[0]-mu_1[1])/theta(sigma_1, m), m)))

m.Obj(-inter)

使用没有问题np.matmul或任何其他允许对象而不仅仅是数值的函数。需要对象是因为b是计算自动微分导数所需的 Gekko 类型值的数组。您还可以使用新的@简化表达式的运算符。您最初的问题陈述不完整,缺少许多定义。我添加了一些示例值,以便脚本可以运行而不会出现定义错误。这里有帮助重现错误的指南 https://stackoverflow.com/help/minimal-reproducible-example.

N = 2
n = 3
qb_index_range = [0,2]
rb_index_range = [0,2]
wr_index_range = [0,2]
info_df = pd.DataFrame({'cost':np.ones(n)})
budget = 100
sigma_post = np.random.rand(n,n)

这是一个使用的例子np.matmul()这也可以是点积np.dot().

sigma_1 = np.matmul(np.matmul(b,sigma_post), b.T)

这也可以用矩阵乘法运算符来编写。

sigma_1 = b@[email protected] /cdn-cgi/l/email-protection

这是完整的脚本。

from gekko import GEKKO
import numpy as np
import pandas as pd

m = GEKKO(remote=False)
m.options.max_iter=1000
                    
N = 2
n = 3
b = m.Array(m.Var,(N,n), lb=0, ub=1, integer=True)
qb_index_range = [0,2]
rb_index_range = [0,2]
wr_index_range = [0,2]
info_df = pd.DataFrame({'cost':np.ones(n)})
budget = 100
sigma_post = np.eye(n)

for i in range(N):
    for j in range(n):
        if j in [qb_index_range[0], rb_index_range[0], wr_index_range[0]]:
            b[i][j].value = 1
        else:
            b[i][j].value = 0

# CONSTRAINT: Each Lineup must be less than budget
z = [None]*N
for i in range(N):
    z[i] = m.Intermediate(sum(b[i, :]*list(info_df['cost'])))
m.Equations([z[i] <= budget for i in range(N)])


# CONSTRAINT: Each Lineup has one QB
z_1 = [None]*N
for i in range(N):
    z_1[i] = m.Intermediate(sum(b[i, qb_index_range[0]: qb_index_range[1]+1]))

m.Equations([z_1[i] == 1 for i in range(N)])


# CONSTRAINT: Each Lineup has one RB
z_2 = np.array([None]*N)
for i in range(N):
    z_2[i] = m.Intermediate(sum(b[i, rb_index_range[0]: rb_index_range[1]+1]))

m.Equations([z_2[i] == 1 for i in range(N)])

# CONSTRAINT: Each Lineup has one WR
z_3 = np.array([None]*N)
for i in range(N):
    z_3[i] = m.Intermediate(sum(b[i, wr_index_range[0]: wr_index_range[1]+1]))

m.Equations([z_3[i] == 1 for i in range(N)])

#OBJECTIVE: maximize with two lineups
#sigma_1 = np.matmul(np.matmul(b,sigma_post), b.T)
sigma_1 = b@[email protected] /cdn-cgi/l/email-protection
                
m.Maximize(sigma_1[0][0] + sigma_1[1][1]- 2*sigma_1[1][0])

m.options.SOLVER = 1 

m.solve(debug=0,disp=False)

print(b)

这产生了一个成功的解决方案。由于原始问题陈述不完整,无法验证正确的解决方案。

[[[1.0] [0.0] [0.0]]
 [[1.0] [0.0] [0.0]]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gekko 返回错误的成功解决方案 的相关文章

随机推荐

  • 在 AFNETWORKING 中返回响应

    我正在关注this http www raywenderlich com 30445 afnetworking crash course在 IOS 中学习 AfNetworking 的教程 我正在使用以下函数来获取服务器的响应 1 NSSt
  • 仅更改图表一个区域的背景颜色[重复]

    这个问题在这里已经有答案了 我想仅更改图表的一部分的背景颜色 那可能吗 例如 使用下面的图表 我可能想表明我对重量在 2 到 4 吨之间的汽车特别感兴趣 因此希望使用粉红色背景突出显示该区域 更具体地说 我想覆盖一个透明的粉红色矩形 该矩形
  • 如何在 Swift 中检索对象的类型? [复制]

    这个问题在这里已经有答案了 我似乎无法在 Swift 中找到返回对象类型的函数或方法 如何在 Swift 中检索对象的类型或类 我尝试使用 Obj C 类 但显然不起作用 在Python中你有类似的东西type or isinstance
  • 如何为每个版本提供 2 种风格和 2 种不同的密钥配置以用于调试版本?

    背景 我认为 Google 登录存在一个问题 该问题与我们对我们开发的 2 种不同风格的应用程序使用相同的密钥配置这一事实有关 原因是两者在调试和发布时似乎具有相同的 SHA1 该问题仅存在于第二个版本的发行版本中 在第一种风格的构建和调试
  • TestNG中BeforeClass和BeforeTest的区别

    从 TestNG 官方文档中我们得知 BeforeClass 带注释的方法将在调用当前类中的第一个测试方法之前运行 BeforeTest 带注释的方法将在属于该类内部的任何测试方法之前运行
  • C# 调用 C++ DLL 传递指针到指针参数

    你们能帮我解决以下问题吗 我有一个 C 函数 dll 它将由另一个 C 应用程序调用 我需要的功能之一如下 struct DataStruct unsigned char data int len DLLAPI int API ReadFi
  • pandas.DataFrame 子类的属性在 pickle 后消失

    我试图将属性添加到 pandas DataFrame 的子类中 它们在酸洗和取消酸洗后消失 import cPickle import pandas as pd class MyClass pd DataFrame def init sel
  • 使用 C# 反序列化具有一个空白键的深度嵌套 Json

    我正在尝试将下面的嵌套 Json 反序列化为自定义 c 类型 该类型也在下面进行了描述 但我不断将反序列化对象中的路径键设置为 null 下面是代码 任何有关如何正确反序列化的建议都非常感谢 Json swagger 2 0 info ve
  • Android:strings.xml的默认语言

    我将翻译我的应用程序 strings xml 文件 strings xml 文件的默认语言是什么 因为现在我需要支持意大利语 我现在编写 strings xml 的语言 和英语 我应该使用 string xml 来表示英语并创建 资源 值
  • 带有消息队列的任务处理状态

    我正在开发一个产品数据导入系统 该系统从外部源下载产品数据 将其转换为正确的模式 并存储结果 本质上是一个 ETL 系统 系统处理的核心消息类型是 ImportProductCommand 它指定要导入的产品和来源 然而 导入命令很少单独发
  • 如何使用 JWT + HttpOnly Cookie 正确刷新令牌?

    我已经使用 JWT HttpOnly Cookies 在我的 AspNetCore API 应用程序中成功设置了身份验证 灵感来自this https stormpath com blog token authentication asp
  • Rails 3:无法验证 CSRF 令牌的真实性

    当我尝试通过 REST 客户端发布数据时 我收到这样的警告 Warning Can t verify CSRF token authenticity 怎么解决这个问题 我相信你正在努力做一个POST from a link 默认情况下lin
  • 如何将 PHP 的 stream_select() 与 zlib 过滤器结合使用?

    我目前有一个用 PHP 编写的服务器守护进程 它接受传入连接并使用以下命令为它们创建网络流stream socket 函数并使用轮询活动流stream select 我希望能够添加一个 zlib 过滤器 使用string filter ap
  • Django 版本 1.5:“url”需要非空的第一个参数。 Django 1.5 中的语法发生了变化

    我开始使用 Django 1 5 版 但我的旧代码出现了问题 a href h3 post title h3 a 错误 url 需要非空的第一个参数 Django 1 5 中的语法发生了变化 请参阅文档 文件 一个值得注意的已弃用功能是转向
  • 当单词以 n-gram 开头时,Elasticsearch Edge NGram 分词器得分更高

    假设与 Edge NGram Tokenizer 有以下映射 settings analysis analyzer autocomplete analyzer tokenizer autocomplete tokenizer filter
  • 不同活动中的相同导航抽屉

    我制作了一个工作导航抽屉 如教程中所示开发者 android com http developer android com网站 但现在 我想使用一个导航抽屉 它是我在 NavigationDrawer class 中为我的应用程序中的多个活
  • Python、Unicode 和 Windows 控制台

    当我尝试printWindows 控制台中的字符串 有时我会收到一条错误消息UnicodeEncodeError charmap codec can t encode character 我认为这是因为 Windows 控制台无法处理所有
  • mediawiki mathjax需要使用转义$x$

    我将 MediaWiki 与 MathJax 一起使用 因为很多页面都有数学方程 但在某些页面上 我还需要按原样显示字符串 x 有什么办法可以转义 x 这样它就不会调用 MathJax 并显示为斜体 x 吗 MathJax 支持 来转义表达
  • 在 swift 中如何理解设置为 private 的全局变量?

    我正在完成一本书中的核心数据练习 它首先创建一个单例的帮助器类 我知道全局变量可以在类的范围之外创建 并且可以在整个项目中访问 但是令我困惑的是 书中的一个示例创建了一个全局变量并将其设置为私有 我假设通过将变量设置为私有 它只能由该特定类
  • Gekko 返回错误的成功解决方案

    以下代码返回Successful Solution Objective 0 但这不是最佳解决方案 最优解是 6 通过阅读其他问题 我认为这是在目标函数中使用非 Gekko 函数的问题 但我使用的唯一非 Gekko 函数是np matmul