首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选项:使用几个@custom_shadow_variable时Java类型的强制转换错误

选项:使用几个@custom_shadow_variable时Java类型的强制转换错误
EN

Stack Overflow用户
提问于 2022-08-31 17:00:55
回答 1查看 34关注 0票数 0

我正在尝试使用OptaPy来优化检查人员的进度。

我尝试添加一个阴影变量,它必须与另一个变量一起更新。文档建议用自定义的VariableListener注释一个影子变量,并让其他人参考它。

我就是这样做的(实际代码的一部分):

代码语言:javascript
复制
@planning_entity
class Task(Slot):
    inspector: Inspector
    prev_slot: Slot
    from_time: datetime

    def __init__(self, inspector: Inspector = None, from_time: datetime = None):
        self.inspector = inspector
        self.from_time = from_time
        self.prev_slot = None

    @custom_shadow_variable(Inspector,
        variable_listener_class = TaskUpdatingVariableListener,
        sources = [planning_variable_reference(variable_name = 'previous_slot')])
    def get_inspector(self):
        return self.inspector

    @custom_shadow_variable(datetime,
        variable_listener_ref = planning_variable_reference(variable_name = 'inspector'))
    def get_from_time(self):
        return self.from_time

    @planning_variable(Slot, 
        value_range_provider_refs=['day_start_range', 'task_range'], 
        graph_type=PlanningVariableGraphType.CHAINED)
    def get_previous_slot(self):
        return self.prev_slot

    def set_previous_slot(self, previous_slot: Slot):
        self.prev_slot = previous_slot

在这里,TaskUpdatingVariableListener@variable_listenerSlot@problem_fact

问题是,当我运行这段代码时,它会给出Java类型的强制转换错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "model_v4.py", line 324, in <module>
  class Task(Slot):
File ".../python3.9/site-packages/optapy/annotations.py", line 546, in planning_entity
  return planning_entity_wrapper(entity_class)
File ".../python3.9/site-packages/optapy/annotations.py", line 540, in planning_entity_wrapper
  out.__optapy_java_class = _generate_planning_entity_class(entity_class_argument, annotation_data)
File ".../python3.9/site-packages/optapy/optaplanner_java_interop.py", line 1030, in _generate_planning_entity_class
  optaplanner_annotations = _get_optaplanner_annotations(python_class)
File ".../python3.9/site-packages/optapy/optaplanner_java_interop.py", line 955, in _get_optaplanner_annotations
  _to_java_list(list(map(lambda annotation: getattr(getattr(python_class, method),
File ".../python3.9/site-packages/optapy/optaplanner_java_interop.py", line 936, in _to_java_list
  out.add(_to_java_map(item))
File ".../python3.9/site-packages/optapy/optaplanner_java_interop.py", line 925, in _to_java_map
  out.put(JObject(key, java.lang.Object), JObject(value, java.lang.Object))
File ".../python3.9/site-packages/jpype/_jobject.py", line 59, in __new__
  return _JObjectFactory(*args, **kwargs)
File ".../python3.9/site-packages/jpype/_jobject.py", line 111, in _JObjectFactory
  return tp._cast(v)
TypeError: Unable to cast 'dict' to java type 'java.lang.Object'

如果删除第二个阴影变量(get_from_time),它编译得相当好!

将变量类型从datetime更改为任何其他类型都没有帮助。

这里有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 15:42:25

这是optapy中的一个bug (详见https://github.com/optapy/optapy/pull/99 ),并将在下一个版本中修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73559441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档