You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于FICO Mosel Xpress IVE的风电场退役工期优化求助

风电场退役工期限制优化方案

核心思路

要实现“指定月份前完成所有退役工作”,本质是禁止在截止月份之后的任何月份安排退役任务,无需复杂的MONTHSUSED变量,直接通过约束限制超期月份的退役量为0即可。

具体修改步骤

1. 调整声明部分

替换原有的MAXMONTHS和MONTHSUSED数组,改为单个截止月份参数:

DECLARATIONS
    MONTHS = 1..24
    PORTS = 1..5
     
    N1 = 75 
    N2 = 91 
    N3 = 88 
    N4 = 67 
    N5 = 90 
    
    M = 24
    T: integer ! 退役截止月份(例如设为18,表示必须在前18个月完成所有工作)
    
    CAPACITY: array(PORTS, MONTHS) of integer 
    COST: array(PORTS, MONTHS) of integer 
    
    DISTANCES1: array(MONTHS,PORTS) of real ! 2.d.p
    DISTANCES2: array(MONTHS,PORTS) of real ! 2.d.p
    DISTANCES3: array(MONTHS,PORTS) of real ! 2.d.p
    DISTANCES4: array(MONTHS,PORTS) of real ! 2.d.p
    DISTANCES5: array(MONTHS,PORTS) of real ! 2.d.p
    
    DECOM1: array(MONTHS,PORTS) of mpvar ! decom of farm 1
    DECOM2: array(MONTHS,PORTS) of mpvar ! decom of farm 2
    DECOM3: array(MONTHS,PORTS) of mpvar ! decom of farm 3
    DECOM4: array(MONTHS,PORTS) of mpvar ! decom of farm 4
    DECOM5: array(MONTHS,PORTS) of mpvar ! decom of farm 5
END-DECLARATIONS

注:原DECOM数组未被使用,可直接删除以简化模型

2. 添加工期限制约束

在现有约束后添加以下内容,强制所有截止月份之后的月份不能安排退役任务:

! 工期限制:所有退役工作必须在第T个月及之前完成
forall(m in MONTHS where m > T, p in PORTS) DECOM1(m,p) = 0
forall(m in MONTHS where m > T, p in PORTS) DECOM2(m,p) = 0
forall(m in MONTHS where m > T, p in PORTS) DECOM3(m,p) = 0
forall(m in MONTHS where m > T, p in PORTS) DECOM4(m,p) = 0
forall(m in MONTHS where m > T, p in PORTS) DECOM5(m,p) = 0

3. 动态调整工期

在数据段(DATA)中给T赋值,例如要提前到第18个月完成:

DATA
    T:=18;
    ! 其他数据赋值...
END-DATA

每次修改T的数值(如12、20等),重新求解即可得到对应工期下的最小成本。

原方案失效原因

你之前声明的MAXMONTHS数组和MONTHSUSED变量没有与实际的退役任务变量(DECOM1-DECOM5)建立约束关联,模型无法识别“超期月份不能使用”的规则,因此约束未生效。

内容的提问来源于stack exchange,提问作者Datakid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:35:21