Есть ли способ расшифровать синтаксическую ошибку, чтобы выяснить, на что она ссылается?

#syntax-error #ampl

#синтаксическая ошибка #ampl

Вопрос:

Я создаю MIP, который пытаюсь запустить через NEOS cplex (AMPL). Каждый раз, когда я запускаю ее, я получаю один и тот же код ошибки, даже если я пытался найти и исправить ошибку, я получаю ошибку: «amplin, строка 9 (смещение 93): контекст синтаксической ошибки: >>> { <<< rtf1 ansi ansicpg1252 cocoartf1671»

Я довольно новичок в AMPL, поэтому я немного не уверен, что означает код ошибки. Мой код разделен на файл модели и файл данных, оба записаны в виде .txt-файла. Кажется, я не могу найти ошибку. Модель:

 # Parameters
    param m;
    param n;
    param T;
    param sigma{t in 1..T};
    param capacity{j in 1..m};
    param demand{i in 1..n};
    param cost{i in 1..n, j in 1..m};
    param holding;
    param InInv{j in 1..m};


# Decision variables
    var x{i in 1..n, j in 1..m} binary;
    var Produced{j in 1..m, t in 1..T} integer <= capacity[j] >= 0;
    var sold{j in 1..m, t in 1..T} integer >= 0;
    var inventory{j in 1..m, t in 0..T} integer >= 0;

# Objective function
    minimize TotalCost: sum{i in 1..n, j in 1..m} x[i,j]*cost[i,j]   sum{j in 1..m, t in 1..T}holding * inventory[j,t];

# Constraints
    subject to BalanceInventory {j in 1..m, t in 1..T}:
        Produced[j,t] inventory[j,t-1]=sold[j,t] inventory[j,t];

    subject to SingleSourcing {i in 1..n}:
        sum{j in 1..m} x[i,j] = 1;

    subject to InitInv {j in 1..m}:
        inventory[j,0]=InInv[j];
  

Данные:

 #Parameters
param m := 4;

param n := 30;

param T := 6;

param sigma := 1 0.125 2 0.125 3 0.25 4 0.125 5 0.125 6 0.25;

param capacity := 1 375  2 375  3 375  4 375;

param demand := 1 200 2 492 3 91 4 190 5 351 6 323 7 23 8 157 9 374 10 351 11 432 12 161 13 300 14 300 15 219 16 339 17 312 18 653 19 440 20 207 21 281 22 233 23 409 24 215 25 7 26 680 27 215 28 395 29 165 30 333;

param cost :
1 2 3 4 :=
1 6.97 3.47 1.73 4.34
2 9.67 3.05 2.78 6.89
3 4.01 4.33 7.2 8.67
4 3.97 5.33 4.75 4.47
5 5.91 5.98 3.6 2.42
6 9.49 6.14 1.67 3.28
7 6.03 3.60 7.53 9.83
8 6.12 6.13 3.57 2.17
9 2.48 7.22 6.9 5.66
10 8.41 3.41 1.11 5.07
11 2.34 5.47 6.32 8.08
12 6.97 5.22 2.15 2.59
13 4.51 3.43 6.32 8.08
14 8.63 8.46 4.63 0.69
15 3.57 4.06 6.01 7.18
16 8.05 4.06 8.48 11.35
17 10.36 5.38 1.77 5.19
18 0.89 8.38 9.5 8.87
19 7.04 1.11 5.39 8.4
20 0.99 6.88 8.33 8.28
21 0.59 7.22 8.49 8.24
22 7 1.34 3.36 6.48
23 2.88 5.28 7.59 8.5
24 8.32 0.73 4.4 8.01
25 6.85 1.41 3.4 6.43
26 4.09 7.19 5.88 4.06
27 8.48 1.38 3.5 7.26
28 1.02 8.47 9.05 8.03
29 6.14 2.39 6.3 8.83
30 9.07 6.23 1.83 2.7;

param holding := 1;

param InInv := 1 0 2 0 3 0 4 0;
  

Итак, если кто-нибудь может помочь мне найти ошибку, чтобы я мог ее исправить, я был бы очень признателен.

Искренне отчаявшийся новичок-программист.

Комментарии:

1. Похоже, что ваш код представляет собой не обычный текст, а RTF .

Ответ №1:

Вы могли бы попробовать установить демонстрационную версию AMPL с ограниченным размером, уменьшив размер проблемы по мере необходимости, чтобы она укладывалась в рамки этой версии, и использовать ее для тестирования вашего кода.

Это поможет определить, заключается ли проблема в вашем синтаксисе или что-то связанное с тем, как вы используете NEOS. Как предложено @melpomene, также возможно, что отправляемый вами файл имеет не ожидаемый формат, поэтому попробуйте передать его через обычный текстовый редактор, например редактор IDE AMPL.

По моему опыту, отладка ОСЗ может быть неприятной, поэтому лучше всего выполнять как можно большую часть отладки в локальной системе, где вы можете получить немного больше отзывов.

Комментарии:

1. Проблема заключалась в том, что файл был не того формата, который я себе представлял. Спасибо за вашу помощь.