Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
Conversion
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Vladislav Kiselev
Conversion
Commits
77589340
Commit
77589340
authored
May 13, 2019
by
Vladislav Kiselev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Добавлен вывод интенсивности грузовых операций в ответ.
parent
7472c3be
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
96 additions
and
11 deletions
+96
-11
src/inport/ConversionUtil.java
src/inport/ConversionUtil.java
+39
-4
src/inport/Main.java
src/inport/Main.java
+27
-2
src/inport/Operation.java
src/inport/Operation.java
+11
-1
src/inport/TaskCase.java
src/inport/TaskCase.java
+4
-0
src/inport/Testing.java
src/inport/Testing.java
+14
-3
tests/with_typing/Bunkers.tipp
tests/with_typing/Bunkers.tipp
+1
-1
No files found.
src/inport/ConversionUtil.java
View file @
77589340
...
...
@@ -1328,7 +1328,7 @@ public class ConversionUtil {
return
Integer
.
compare
(
opId
,
o
.
opId
);
}
if
(!
bunkerId
.
isPresent
())
{
return
-
1
;
return
(!
o
.
bunkerId
.
isPresent
())
?
0
:
-
1
;
}
if
(!
o
.
bunkerId
.
isPresent
())
{
return
1
;
...
...
@@ -1646,6 +1646,24 @@ public class ConversionUtil {
templates
=
Task
.
renumberOperations
(
taskCase
);
}
ArrayList
<
ArrayList
<
String
>>
cargoOpIntensity
;
if
(
arrays
.
containsKey
(
"cargo_op_intensity"
))
{
cargoOpIntensity
=
arrays
.
get
(
"cargo_op_intensity"
);
}
else
{
cargoOpIntensity
=
new
ArrayList
<>();
for
(
int
opNo
=
0
;
opNo
<
opStatus
.
size
();
opNo
++)
{
cargoOpIntensity
.
add
(
new
ArrayList
<>());
for
(
String
val
:
opStatus
.
get
(
opNo
))
{
if
(
val
.
equals
(
"true"
)
&&
(
templates
.
get
(
opNo
-
1
)
instanceof
LoadingTemplate
))
{
LoadingTemplate
op
=
(
LoadingTemplate
)
templates
.
get
(
opNo
-
1
);
cargoOpIntensity
.
get
(
opNo
).
add
(
Integer
.
toString
((
int
)
Math
.
ceil
(
op
.
getIntensity
())));
}
else
{
cargoOpIntensity
.
get
(
opNo
).
add
(
"0"
);
}
}
}
}
Map
<
Integer
,
OperationTemplate
>
operationById
=
new
TreeMap
<>();
for
(
OperationTemplate
operation
:
taskCase
.
getTemplates
())
{
operationById
.
put
(
operation
.
getId
(),
operation
);
...
...
@@ -1669,12 +1687,25 @@ public class ConversionUtil {
for
(
int
opNo
=
1
;
opNo
<
opStatus
.
size
();
opNo
++)
{
int
duration
=
0
;
int
t
=
0
;
int
t
=
1
;
boolean
lastFixation
=
false
;
while
(
t
<
opStatus
.
get
(
opNo
).
size
())
{
if
((
opStatus
.
get
(
opNo
).
get
(
t
).
equals
(
"true"
)
&&
(
lastFixation
!=
isFixed
.
get
(
opNo
).
get
(
t
))
&&
(
duration
!=
0
))
||
(
opStatus
.
get
(
opNo
).
get
(
t
).
equals
(
"false"
)
&&
(
duration
!=
0
)))
{
// Добавляем новую операцию.
boolean
isOpLogicallyInterrupted
=
false
;
if
(
opStatus
.
get
(
opNo
).
get
(
t
).
equals
(
"true"
)
&&
(
lastFixation
!=
isFixed
.
get
(
opNo
).
get
(
t
))
&&
(
duration
!=
0
))
{
// У операции изменилась фиксация.
isOpLogicallyInterrupted
=
true
;
}
if
(
opStatus
.
get
(
opNo
).
get
(
t
).
equals
(
"false"
)
&&
(
duration
!=
0
))
{
// Операция просто закончилась.
isOpLogicallyInterrupted
=
true
;
}
if
((!
cargoOpIntensity
.
get
(
opNo
).
get
(
t
-
1
).
equals
(
cargoOpIntensity
.
get
(
opNo
).
get
(
t
)))
&&
(
duration
!=
0
))
{
// Изменилась интенсивность погрузки.
isOpLogicallyInterrupted
=
true
;
}
if
(
isOpLogicallyInterrupted
)
{
// Добавляем новую операцию.
Operation
op
=
new
Operation
();
op
.
setStart
(
t
-
duration
-
1
);
op
.
setDuration
(
duration
);
...
...
@@ -1705,6 +1736,10 @@ public class ConversionUtil {
}
}
if
(!
cargoOpIntensity
.
get
(
opNo
).
get
(
t
-
1
).
equals
(
"0"
))
{
op
.
setIntensity
(
Optional
.
of
(
Integer
.
valueOf
(
cargoOpIntensity
.
get
(
opNo
).
get
(
t
-
1
))));
}
op
.
setFixation
(
true
);
if
(!
oldSolution
.
contains
(
op
.
toString
()))
{
op
.
setFixation
(
false
);
...
...
src/inport/Main.java
View file @
77589340
...
...
@@ -113,11 +113,36 @@ public class Main {
break
;
}
case
"debug 2"
:
{
String
fileName
=
"experiment/in.ipp"
;
String
solverResults
=
"temp_data/solver_results.txt"
;
String
output
=
"experiment/debug_info.txt"
;
TaskCase
task
=
new
TaskCase
();
try
{
task
.
deserialize
(
fileName
);
}
catch
(
IOException
e
)
{
System
.
out
.
println
(
e
.
getMessage
());
break
;
}
String
error
=
solveTaskWithPartialCargoOp
(
task
);
if
(!
error
.
isEmpty
())
{
System
.
out
.
println
(
"Error : "
+
error
);
break
;
}
else
{
task
.
serialize
(
fileName
);
}
debugInfo
(
task
,
solverResults
,
output
);
break
;
}
case
"testing"
:
test_2
();
break
;
case
"testing_
2
"
:
test
_2_0
();
case
"testing_
with_partial_op
"
:
test
WithPartialOp
();
break
;
case
"testing_exp"
:
test_2_exp
();
...
...
src/inport/Operation.java
View file @
77589340
...
...
@@ -19,8 +19,16 @@ public class Operation {
private
double
duration
;
private
MovingObject
executor
;
private
Optional
<
Bunker
>
bunker
=
Optional
.
empty
();
private
Optional
<
Integer
>
intensity
=
Optional
.
empty
();
private
List
<
MovingObject
>
resources
;
public
void
setIntensity
(
Optional
<
Integer
>
intensity
)
{
this
.
intensity
=
intensity
;
}
public
Optional
<
Integer
>
getIntensity
()
{
return
intensity
;
}
public
Optional
<
Bunker
>
getBunker
()
{
return
bunker
;
}
...
...
@@ -130,7 +138,9 @@ public class Operation {
}
sb
.
append
(
obj
.
getId
());
}
sb
.
append
(
"])"
);
sb
.
append
(
"]"
);
sb
.
append
(
intensity
.
map
(
i
->
" "
+
i
).
orElse
(
""
));
sb
.
append
(
")"
);
return
sb
.
toString
();
}
}
src/inport/TaskCase.java
View file @
77589340
...
...
@@ -718,6 +718,10 @@ public class TaskCase {
op
.
setBunker
(
Optional
.
of
(
m_bunker
.
get
(
Integer
.
valueOf
(
items
[
1
].
trim
()))));
}
}
String
intensity
=
rStr
.
substring
(
rStr
.
indexOf
(
']'
)
+
1
).
trim
();
if
(!
intensity
.
isEmpty
())
{
op
.
setIntensity
(
Optional
.
of
(
Integer
.
valueOf
(
intensity
)));
}
solution
.
add
(
op
);
}
...
...
src/inport/Testing.java
View file @
77589340
...
...
@@ -35,6 +35,14 @@ public class Testing {
ConversionUtil:
:
resolveMiniZincResults
);
}
public
static
String
solveTaskWithPartialCargoOp
(
TaskCase
task
)
{
return
solveTask
(
task
,
"conversion_2_with_partial_cargo_operations.mzn"
,
ConversionUtil:
:
portToMiniZinc_2
,
ConversionUtil:
:
resolveMiniZincResults
);
}
public
static
String
solveTask_2_0
(
TaskCase
task
)
{
return
solveTask
(
task
,
...
...
@@ -155,13 +163,16 @@ public class Testing {
testGroup
(
"without_typing"
,
Testing:
:
solveTask_1
);
}
public
static
void
test_2
()
{
static
void
test_2
()
{
testGroup
(
"with_typing"
,
Testing:
:
solveTask_2
);
}
public
static
void
test_2_0
()
{
public
static
void
testWithPartialOp
()
{
testGroup
(
"with_typing"
,
Testing:
:
solveTaskWithPartialCargoOp
);
}
static
void
test_2_0
()
{
testGroup
(
"with_typing"
,
Testing:
:
solveTask_2_0
);
}
public
static
void
test_2_exp
()
{
static
void
test_2_exp
()
{
testGroup
(
"experiments"
,
Testing:
:
solveTask_2
);
}
}
tests/with_typing/Bunkers.tipp
View file @
77589340
...
...
@@ -79,4 +79,4 @@ Task Properties
Solution
8.0
20; F; 1.0; 2.0 (101 202 [])
20; F; 1.0; 2.0 (101 202 []
2
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment