Add linear_solver/samples/SimpleLPProgram
This commit is contained in:
@@ -1,20 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<LangVersion>7.2</LangVersion>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<EnableDefaultItems>false</EnableDefaultItems>
|
||||
<RestoreSources>../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json</RestoreSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<GenerateTailCalls>true</GenerateTailCalls>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="SimpleProgram.cs" />
|
||||
<PackageReference Include="Google.OrTools" Version="6.9.*" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,37 +0,0 @@
|
||||
# Copyright 2018 Google LLC
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# [START program]
|
||||
from __future__ import print_function
|
||||
from ortools.linear_solver import pywraplp
|
||||
|
||||
def main():
|
||||
solver = pywraplp.Solver('SolveSimpleSystem',
|
||||
pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
|
||||
# Create the variables x and y.
|
||||
x = solver.NumVar(0, 1, 'x')
|
||||
y = solver.NumVar(0, 2, 'y')
|
||||
# Create the objective function, x + y.
|
||||
objective = solver.Objective()
|
||||
objective.SetCoefficient(x, 1)
|
||||
objective.SetCoefficient(y, 1)
|
||||
objective.SetMaximization()
|
||||
# Call the solver and display the results.
|
||||
solver.Solve()
|
||||
print('Solution:')
|
||||
print('x = ', x.solution_value())
|
||||
print('y = ', y.solution_value())
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
# [END program]
|
||||
@@ -29,8 +29,8 @@ endif
|
||||
|
||||
# Main target
|
||||
.PHONY: cc # Build C++ OR-Tools library.
|
||||
.PHONY: check_cc # Quick check only running few C++ OR-Tools examples.
|
||||
.PHONY: test_cc # Run all C++ OR-Tools examples.
|
||||
.PHONY: check_cc # Quick check only running C++ OR-Tools samples targets.
|
||||
.PHONY: test_cc # Run all C++ OR-Tools test targets.
|
||||
.PHONY: test_fz # Run all Flatzinc OR-Tools examples.
|
||||
ifndef HAS_CCC
|
||||
cc:
|
||||
@@ -41,13 +41,9 @@ test_cc: cc
|
||||
test_fz: cc
|
||||
else
|
||||
cc: $(OR_TOOLS_LIBS)
|
||||
check_cc: check_cc_examples
|
||||
test_cc: \
|
||||
test_cc_tests \
|
||||
test_cc_samples \
|
||||
test_cc_examples
|
||||
test_fz: \
|
||||
test_fz_examples
|
||||
check_cc: check_cc_pimpl
|
||||
test_cc: test_cc_pimpl
|
||||
test_fz: test_fz_pimpl
|
||||
BUILT_LANGUAGES += C++
|
||||
endif
|
||||
|
||||
@@ -407,6 +403,9 @@ $(OBJ_DIR)/%.$O: $(CC_EX_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
|
||||
$(OBJ_DIR)/%.$O: $(CONTRIB_EX_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
|
||||
$(CCC) $(CFLAGS) -c $(CONTRIB_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
|
||||
|
||||
$(OBJ_DIR)/%.$O: ortools/linear_solver/samples/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
|
||||
$(CCC) $(CFLAGS) -c ortools$Slinear_solver$Ssamples$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
|
||||
|
||||
$(OBJ_DIR)/%.$O: ortools/sat/samples/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
|
||||
$(CCC) $(CFLAGS) -c ortools$Ssat$Ssamples$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
|
||||
|
||||
@@ -416,22 +415,33 @@ $(BIN_DIR)/%$E: $(OBJ_DIR)/%.$O $(OR_TOOLS_LIBS) | $(BIN_DIR)
|
||||
rcc_%: $(BIN_DIR)/%$E FORCE
|
||||
$(BIN_DIR)$S$*$E $(ARGS)
|
||||
|
||||
.PHONY: test_cc_tests # Build and Run all C++ tests (located in examples/tests)
|
||||
test_cc_tests: \
|
||||
rcc_ac4r_table_test \
|
||||
rcc_boolean_test \
|
||||
rcc_bug_fz1 \
|
||||
rcc_cpp11_test \
|
||||
rcc_forbidden_intervals_test \
|
||||
rcc_gcc_test \
|
||||
rcc_issue57 \
|
||||
rcc_min_max_test \
|
||||
rcc_visitor_test
|
||||
# $(MAKE) rcc_issue173 # error: too long
|
||||
.PHONY: test_cc_sat_samples # Build and Run all C++ Sat Samples (located in ortools/sat/samples)
|
||||
test_cc_sat_samples: \
|
||||
rcc_binpacking_problem \
|
||||
rcc_bool_or_sample \
|
||||
rcc_channeling_sample \
|
||||
rcc_code_sample \
|
||||
rcc_interval_sample \
|
||||
rcc_literal_sample \
|
||||
rcc_no_overlap_sample \
|
||||
rcc_optional_interval_sample \
|
||||
rcc_rabbits_and_pheasants \
|
||||
rcc_ranking_sample \
|
||||
rcc_reified_sample \
|
||||
rcc_simple_solve \
|
||||
rcc_solve_all_solutions \
|
||||
rcc_solve_with_intermediate_solutions \
|
||||
rcc_solve_with_time_limit \
|
||||
rcc_stop_after_n_solutions
|
||||
|
||||
.PHONY: check_cc_examples # Build and Run few C++ Examples (located in examples/cpp)
|
||||
check_cc_examples: \
|
||||
rcc_simple_program \
|
||||
.PHONY: test_cc_linear_solver_samples # Build and Run all C++ LP Samples (located in ortools/linear_solver/samples)
|
||||
test_cc_linear_solver_samples: \
|
||||
rcc_simple_lp_program
|
||||
|
||||
.PHONY: check_cc_pimpl
|
||||
check_cc_pimpl: \
|
||||
test_cc_sat_samples \
|
||||
test_cc_linear_solver_samples \
|
||||
rcc_linear_programming \
|
||||
rcc_stigler_diet \
|
||||
rcc_constraint_programming_cp \
|
||||
@@ -445,8 +455,24 @@ check_cc_examples: \
|
||||
rcc_nurses_cp \
|
||||
rcc_job_shop_cp ;
|
||||
|
||||
.PHONY: test_cc_examples # Build and Run all C++ Examples (located in examples/cpp)
|
||||
test_cc_examples: check_cc_examples \
|
||||
.PHONY: test_cc_tests # Build and Run all C++ Tests (located in ortools/examples/tests)
|
||||
test_cc_tests: \
|
||||
rcc_ac4r_table_test \
|
||||
rcc_boolean_test \
|
||||
rcc_bug_fz1 \
|
||||
rcc_cpp11_test \
|
||||
rcc_forbidden_intervals_test \
|
||||
rcc_gcc_test \
|
||||
rcc_issue57 \
|
||||
rcc_min_max_test \
|
||||
rcc_visitor_test
|
||||
# $(MAKE) rcc_issue173 # error: too long
|
||||
|
||||
.PHONY: test_cc_contrib # Build and Run all C++ Contrib (located in ortools/examples/contrib)
|
||||
test_cc_contrib: ;
|
||||
|
||||
.PHONY: test_cc_cpp # Build and Run all C++ Examples (located in ortools/examples/cpp)
|
||||
test_cc_cpp: \
|
||||
rcc_costas_array \
|
||||
rcc_cryptarithm \
|
||||
rcc_cvrp_disjoint_tw \
|
||||
@@ -502,27 +528,15 @@ test_cc_examples: check_cc_examples \
|
||||
# $(MAKE) run SOURCE=examples/cpp/shift_minimization_sat.cc # Port to new API.
|
||||
# $(MAKE) run SOURCE=examples/cpp/solve.cc # Need data file
|
||||
|
||||
.PHONY: test_cc_samples # Build and Run all C++ Samples (located in ortools/*/samples)
|
||||
test_cc_samples: \
|
||||
rcc_binpacking_problem \
|
||||
rcc_bool_or_sample \
|
||||
rcc_channeling_sample \
|
||||
rcc_code_sample \
|
||||
rcc_interval_sample \
|
||||
rcc_literal_sample \
|
||||
rcc_no_overlap_sample \
|
||||
rcc_optional_interval_sample \
|
||||
rcc_rabbits_and_pheasants \
|
||||
rcc_ranking_sample \
|
||||
rcc_reified_sample \
|
||||
rcc_simple_solve \
|
||||
rcc_solve_all_solutions \
|
||||
rcc_solve_with_intermediate_solutions \
|
||||
rcc_solve_with_time_limit \
|
||||
rcc_stop_after_n_solutions
|
||||
.PHONY: test_cc_pimpl
|
||||
test_cc_pimpl: \
|
||||
check_cc_pimpl \
|
||||
test_cc_tests \
|
||||
test_cc_contrib \
|
||||
test_cc_cpp
|
||||
|
||||
.PHONY: test_fz_examples # Build and Run few Flatzinc Samples (located in examples/flatzinc)
|
||||
test_fz_examples: \
|
||||
.PHONY: test_fz_pimpl
|
||||
test_fz_pimpl: \
|
||||
rfz_golomb \
|
||||
rfz_alpha
|
||||
|
||||
|
||||
@@ -37,16 +37,9 @@ dotnet:
|
||||
check_dotnet: dotnet
|
||||
test_dotnet: dotnet
|
||||
else
|
||||
dotnet: \
|
||||
dotnet_csharp \
|
||||
dotnet_fsharp
|
||||
check_dotnet: check_dotnet_examples
|
||||
test_dotnet: \
|
||||
test_dotnet_csharp \
|
||||
test_dotnet_fsharp \
|
||||
test_dotnet_tests \
|
||||
test_donet_samples \
|
||||
test_dotnet_examples
|
||||
dotnet: dotnet_csharp dotnet_fsharp
|
||||
check_dotnet: check_dotnet_pimpl
|
||||
test_dotnet: test_dotnet_pimpl
|
||||
BUILT_LANGUAGES +=, dotnet \(netstandard2.0\)
|
||||
endif
|
||||
|
||||
@@ -477,6 +470,42 @@ rdotnet_%.cs: \
|
||||
"$(DOTNET_BIN)" build ortools$Ssat$Ssamples$S$*.csproj
|
||||
"$(DOTNET_BIN)" run --no-build --project ortools$Ssat$Ssamples$S$*.csproj -- $(ARGS)
|
||||
|
||||
rdotnet_%.cs: \
|
||||
ortools/linear_solver/samples/%.cs \
|
||||
ortools/linear_solver/samples/%.csproj \
|
||||
$(DOTNET_ORTOOLS_NUPKG) FORCE
|
||||
"$(DOTNET_BIN)" build ortools$Slinear_solver$Ssamples$S$*.csproj
|
||||
"$(DOTNET_BIN)" run --no-build --project ortools$Slinear_solver$Ssamples$S$*.csproj -- $(ARGS)
|
||||
|
||||
.PHONY: test_donet_sat_samples # Build and Run all .Net SAT Samples (located in ortools/sat/samples)
|
||||
test_dotnet_samples: \
|
||||
rdotnet_binpacking_problem.cs \
|
||||
rdotnet_bool_or_sample.cs \
|
||||
rdotnet_channeling_sample.cs \
|
||||
rdotnet_code_sample.cs \
|
||||
rdotnet_interval_sample.cs \
|
||||
rdotnet_literal_sample.cs \
|
||||
rdotnet_no_overlap_sample.cs \
|
||||
rdotnet_optional_interval_sample.cs \
|
||||
rdotnet_rabbits_and_pheasants.cs \
|
||||
rdotnet_ranking_sample.cs \
|
||||
rdotnet_reified_sample.cs \
|
||||
rdotnet_simple_solve.cs \
|
||||
rdotnet_solve_all_solutions.cs \
|
||||
rdotnet_solve_with_intermediate_solutions.cs \
|
||||
rdotnet_solve_with_time_limit.cs \
|
||||
rdotnet_stop_after_n_solutions.cs
|
||||
|
||||
.PHONY: test_donet_linear_solver_samples # Build and Run all .Net LP Samples (located in ortools/linear_solver/samples)
|
||||
test_dotnet_linear_solver_samples: \
|
||||
rdotnet_SimpleLpProgram
|
||||
|
||||
.PHONY: check_dotnet_pimpl
|
||||
check_dotnet_pimpl: \
|
||||
test_donet_sat_samples \
|
||||
test_donet_linear_solver_samples \
|
||||
rdotnet_SimpleProgramFSharp.fs
|
||||
|
||||
.PHONY: test_dotnet_tests # Build and Run all .Net Tests (located in examples/test)
|
||||
test_dotnet_tests: \
|
||||
rdotnet_issue18.cs \
|
||||
@@ -487,18 +516,7 @@ test_dotnet_tests: \
|
||||
rdotnet_testsat.cs \
|
||||
rdotnet_test_sat_model.cs
|
||||
|
||||
.PHONY: check_dotnet_examples # Build and Run few C++ Examples (located in examples/cpp)
|
||||
check_dotnet_examples: \
|
||||
rdotnet_SimpleProgram.cs \
|
||||
rdotnet_SimpleProgramFSharp.fs
|
||||
|
||||
.PHONY: test_dotnet_examples # Build and Run all .Net Examples (located in examples/dotnet)
|
||||
test_dotnet_examples: \
|
||||
check_dotnet_examples \
|
||||
test_dotnet_examples_csharp \
|
||||
test_dotnet_examples_fsharp
|
||||
|
||||
.PHONY: test_dotnet_examples_csharp # Build and Run all CSharp Examples (located in examples/dotnet)
|
||||
.PHONY: test_dotnet_examples_csharp # Build and Run all CSharp Examples (located in examples/dotnet and examples/contrib)
|
||||
test_dotnet_examples_csharp: \
|
||||
rdotnet_3_jugs_regular.cs \
|
||||
rdotnet_alldifferent_except_0.cs \
|
||||
@@ -622,7 +640,7 @@ test_dotnet_examples_csharp: \
|
||||
# $(MAKE) rdotnet_secret_santa # too long
|
||||
# $(MAKE) rdotnet_word_square # depends on /usr/share/dict/words
|
||||
|
||||
.PHONY: test_dotnet_examples_fsharp # Build and Run all FSharp Samples (located in examples/dotnet)
|
||||
.PHONY: test_dotnet_examples_fsharp # Build and Run all FSharp Samples (located in examples/dotnet and examples/contrib)
|
||||
test_dotnet_examples_fsharp: \
|
||||
rdotnet_fsintegerprogramming.fs \
|
||||
rdotnet_fslinearprogramming.fs \
|
||||
@@ -640,24 +658,12 @@ test_dotnet_examples_fsharp: \
|
||||
rdotnet_fsvolsay3-lpSolve.fs \
|
||||
rdotnet_fsvolsay.fs
|
||||
|
||||
.PHONY: test_donet_samples # Build and Run all .Net Samples (located in ortools/*/samples)
|
||||
test_dotnet_samples: \
|
||||
rdotnet_binpacking_problem.cs \
|
||||
rdotnet_bool_or_sample.cs \
|
||||
rdotnet_channeling_sample.cs \
|
||||
rdotnet_code_sample.cs \
|
||||
rdotnet_interval_sample.cs \
|
||||
rdotnet_literal_sample.cs \
|
||||
rdotnet_no_overlap_sample.cs \
|
||||
rdotnet_optional_interval_sample.cs \
|
||||
rdotnet_rabbits_and_pheasants.cs \
|
||||
rdotnet_ranking_sample.cs \
|
||||
rdotnet_reified_sample.cs \
|
||||
rdotnet_simple_solve.cs \
|
||||
rdotnet_solve_all_solutions.cs \
|
||||
rdotnet_solve_with_intermediate_solutions.cs \
|
||||
rdotnet_solve_with_time_limit.cs \
|
||||
rdotnet_stop_after_n_solutions.cs
|
||||
.PHONY: test_dotnet_pimpl
|
||||
test_dotnet_pimpl: \
|
||||
check_dotnet_pimpl \
|
||||
test_dotnet_tests \
|
||||
test_dotnet_examples_csharp \
|
||||
test_dotnet_examples_fsharp
|
||||
|
||||
################
|
||||
## Cleaning ##
|
||||
@@ -706,6 +712,8 @@ clean_dotnet:
|
||||
-$(DELREC) $(TEST_PATH)$Sobj
|
||||
-$(DELREC) ortools$Ssat$Ssamples$Sbin
|
||||
-$(DELREC) ortools$Ssat$Ssamples$Sobj
|
||||
-$(DELREC) ortools$Slinear_solver$Ssamples$Sbin
|
||||
-$(DELREC) ortools$Slinear_solver$Ssamples$Sobj
|
||||
-$(DELREC) $(TEMP_DOTNET_DIR)
|
||||
-@"$(DOTNET_BIN)" nuget locals all --clear
|
||||
|
||||
|
||||
@@ -41,11 +41,8 @@ check_java: java
|
||||
test_java: java
|
||||
else
|
||||
java: $(JAVA_OR_TOOLS_LIBS)
|
||||
check_java: check_java_examples
|
||||
test_java: \
|
||||
test_java_tests \
|
||||
test_java_samples \
|
||||
test_java_examples
|
||||
check_java: check_java_pimpl
|
||||
test_java: test_java_pimpl
|
||||
BUILT_LANGUAGES +=, Java
|
||||
endif
|
||||
|
||||
@@ -320,6 +317,13 @@ $(CLASS_DIR)/%: $(SRC_DIR)/ortools/sat/samples/%.java $(JAVA_OR_TOOLS_LIBS) | $(
|
||||
-cp $(LIB_DIR)$Scom.google.ortools.jar$(CPSEP)$(LIB_DIR)$Sprotobuf.jar \
|
||||
ortools$Ssat$Ssamples$S$*.java
|
||||
|
||||
$(CLASS_DIR)/%: $(SRC_DIR)/ortools/linear_solver/samples/%.java $(JAVA_OR_TOOLS_LIBS) | $(CLASS_DIR)
|
||||
-$(DELREC) $(CLASS_DIR)$S$*
|
||||
-$(MKDIR_P) $(CLASS_DIR)$S$*
|
||||
"$(JAVAC_BIN)" -d $(CLASS_DIR)$S$* \
|
||||
-cp $(LIB_DIR)$Scom.google.ortools.jar$(CPSEP)$(LIB_DIR)$Sprotobuf.jar \
|
||||
ortools$Slinear_solver$Ssamples$S$*.java
|
||||
|
||||
$(LIB_DIR)/%$J: $(CLASS_DIR)/% | $(LIB_DIR)
|
||||
-$(DEL) $(LIB_DIR)$S$*.jar
|
||||
"$(JAR_BIN)" cvf $(LIB_DIR)$S$*.jar -C $(CLASS_DIR)$S$* .
|
||||
@@ -329,24 +333,47 @@ rjava_%: $(LIB_DIR)/%$J FORCE
|
||||
-cp $(LIB_DIR)$S$*$J$(CPSEP)$(LIB_DIR)$Scom.google.ortools.jar$(CPSEP)$(LIB_DIR)$Sprotobuf.jar \
|
||||
$* $(ARGS)
|
||||
|
||||
.PHONY: test_java_tests # Build and Run all Java Tests (located in examples/tests)
|
||||
test_java_tests: \
|
||||
rjava_TestLp
|
||||
.PHONY: test_java_sat_samples # Build and Run all Java SAT Samples (located in ortools/sat/samples)
|
||||
test_java_sat_samples: \
|
||||
rjava_BinPackingProblem \
|
||||
rjava_BoolOrSample \
|
||||
rjava_ChannelingSample \
|
||||
rjava_CodeSample \
|
||||
rjava_IntervalSample \
|
||||
rjava_LiteralSample \
|
||||
rjava_NoOverlapSample \
|
||||
rjava_OptionalIntervalSample \
|
||||
rjava_RabbitsAndPheasants \
|
||||
rjava_RankingSample \
|
||||
rjava_ReifiedSample \
|
||||
rjava_SimpleSolve \
|
||||
rjava_SolveAllSolutions \
|
||||
rjava_SolveWithIntermediateSolutions \
|
||||
rjava_SolveWithTimeLimit \
|
||||
rjava_StopAfterNSolutions
|
||||
|
||||
.PHONY: check_java_examples # Build and Run few Java Examples (located in examples/java)
|
||||
check_java_examples: \
|
||||
rjava_SimpleProgram \
|
||||
.PHONY: test_java_linear_solver_samples # Build and Run all Java LP Samples (located in ortools/linear_solver/samples)
|
||||
test_java_linear_solver_samples: \
|
||||
rjava_SimpleLpProgram
|
||||
|
||||
.PHONY: check_java_pimpl
|
||||
check_java_pimpl: \
|
||||
test_java_sat_samples \
|
||||
test_java_linear_solver_samples \
|
||||
rjava_LinearProgramming \
|
||||
rjava_IntegerProgramming \
|
||||
rjava_Tsp \
|
||||
rjava_Vrp \
|
||||
rjava_Knapsack
|
||||
|
||||
.PHONY: test_java_examples # Build and Run all Java Examples (located in examples/java)
|
||||
test_java_examples: check_java_examples \
|
||||
.PHONY: test_java_tests # Build and Run all Java Tests (located in examples/tests)
|
||||
test_java_tests: \
|
||||
rjava_TestLp
|
||||
|
||||
.PHONY: test_java_contrib # Build and Run all Java Contrib (located in examples/contrib)
|
||||
test_java_contrib: \
|
||||
rjava_AllDifferentExcept0 \
|
||||
rjava_AllInterval \
|
||||
rjava_CapacitatedVehicleRoutingProblemWithTimeWindows \
|
||||
rjava_Circuit \
|
||||
rjava_CoinsGridMIP \
|
||||
rjava_ColoringMIP \
|
||||
@@ -356,12 +383,9 @@ test_java_examples: check_java_examples \
|
||||
rjava_Diet \
|
||||
rjava_DietMIP \
|
||||
rjava_DivisibleBy9Through1 \
|
||||
rjava_FlowExample \
|
||||
rjava_GolombRuler \
|
||||
rjava_KnapsackMIP \
|
||||
rjava_LeastDiff \
|
||||
rjava_LinearAssignmentAPI \
|
||||
rjava_LsApi \
|
||||
rjava_MagicSquare \
|
||||
rjava_Map2 \
|
||||
rjava_Map \
|
||||
@@ -371,7 +395,6 @@ test_java_examples: check_java_examples \
|
||||
rjava_NQueens \
|
||||
rjava_Partition \
|
||||
rjava_QuasigroupCompletion \
|
||||
rjava_RabbitsPheasants \
|
||||
rjava_SendMoreMoney2 \
|
||||
rjava_SendMoreMoney \
|
||||
rjava_SendMostMoney \
|
||||
@@ -392,24 +415,25 @@ test_java_examples: check_java_examples \
|
||||
rjava_Xkcd \
|
||||
rjava_YoungTableaux
|
||||
|
||||
.PHONY: test_java_samples # Build and Run all Java Samples (located in ortools/*/samples)
|
||||
test_java_samples: \
|
||||
rjava_BinPackingProblem \
|
||||
rjava_BoolOrSample \
|
||||
rjava_ChannelingSample \
|
||||
rjava_CodeSample \
|
||||
rjava_IntervalSample \
|
||||
rjava_LiteralSample \
|
||||
rjava_NoOverlapSample \
|
||||
rjava_OptionalIntervalSample \
|
||||
rjava_RabbitsAndPheasants \
|
||||
rjava_RankingSample \
|
||||
rjava_ReifiedSample \
|
||||
rjava_SimpleSolve \
|
||||
rjava_SolveAllSolutions \
|
||||
rjava_SolveWithIntermediateSolutions \
|
||||
rjava_SolveWithTimeLimit \
|
||||
rjava_StopAfterNSolutions
|
||||
.PHONY: test_java_java # Build and Run all Java Examples (located in ortools/examples/java)
|
||||
test_java_java: \
|
||||
rjava_CapacitatedVehicleRoutingProblemWithTimeWindows \
|
||||
rjava_FlowExample \
|
||||
rjava_IntegerProgramming \
|
||||
rjava_Knapsack \
|
||||
rjava_LinearAssignmentAPI \
|
||||
rjava_LinearProgramming \
|
||||
rjava_LsApi \
|
||||
rjava_RabbitsPheasants \
|
||||
rjava_Tsp \
|
||||
rjava_Vrp
|
||||
|
||||
.PHONY: test_java_pimpl
|
||||
test_java_pimpl: \
|
||||
check_java_pimpl \
|
||||
test_java_tests \
|
||||
test_java_contrib \
|
||||
test_java_java
|
||||
|
||||
################
|
||||
## Cleaning ##
|
||||
|
||||
@@ -54,24 +54,17 @@ PYTHON_OR_TOOLS_LIBS = \
|
||||
|
||||
# Main target
|
||||
.PHONY: python # Build Python OR-Tools.
|
||||
.PHONY: check_python # Quick check only running few Python OR-Tools examples.
|
||||
.PHONY: test_python # Test Python OR-Tools using various examples.
|
||||
.PHONY: check_python # Quick check only running Python OR-Tools samples.
|
||||
.PHONY: test_python # Run all Python OR-Tools test targets.
|
||||
ifneq ($(PYTHON_EXECUTABLE),)
|
||||
python: $(PYTHON_OR_TOOLS_LIBS)
|
||||
|
||||
check_python: check_python_examples
|
||||
|
||||
test_python: \
|
||||
test_python_tests \
|
||||
test_python_samples \
|
||||
test_python_examples
|
||||
|
||||
check_python: check_python_pimpl
|
||||
test_python: test_python_pimpl
|
||||
BUILT_LANGUAGES +=, Python$(PYTHON_VERSION)
|
||||
else
|
||||
python:
|
||||
@echo PYTHON_EXECUTABLE = "${PYTHON_EXECUTABLE}"
|
||||
$(warning Cannot find '$(PYTHON_COMPILER)' command which is needed for build. Please make sure it is installed and in system path.)
|
||||
|
||||
check_python: python
|
||||
test_python: python
|
||||
endif
|
||||
@@ -492,12 +485,36 @@ rpy_%: ortools/sat/samples/%.py $(PYTHON_OR_TOOLS_LIBS) FORCE
|
||||
rpy_%: ortools/linear_solver/samples/%.py $(PYTHON_OR_TOOLS_LIBS) FORCE
|
||||
$(SET_PYTHONPATH) "$(PYTHON_EXECUTABLE)" ortools$Slinear_solver$Ssamples$S$*.py $(ARGS)
|
||||
|
||||
.PHONY: check_python_examples # Build and Run few Python Examples (located in examples/python and examples/contrib)
|
||||
check_python_examples: \
|
||||
rpy_simple_program \
|
||||
.PHONY: test_python_sat_samples # Run all Python Sat Samples (located in ortools/sat/samples)
|
||||
test_python_sat_samples: \
|
||||
rpy_binpacking_problem \
|
||||
rpy_bool_or_sample \
|
||||
rpy_channeling_sample \
|
||||
rpy_code_sample \
|
||||
rpy_interval_sample \
|
||||
rpy_literal_sample \
|
||||
rpy_minimal_jobshop \
|
||||
rpy_no_overlap_sample \
|
||||
rpy_optional_interval_sample \
|
||||
rpy_rabbits_and_pheasants \
|
||||
rpy_ranking_sample \
|
||||
rpy_reified_sample \
|
||||
rpy_simple_solve \
|
||||
rpy_solve_all_solutions \
|
||||
rpy_solve_with_intermediate_solutions \
|
||||
rpy_solve_with_time_limit \
|
||||
rpy_stop_after_n_solutions
|
||||
|
||||
.PHONY: test_python_linear_solver_samples # Run all Python LP Samples (located in ortools/linear_solver/samples)
|
||||
test_python_linear_solver_samples: \
|
||||
rpy_simple_lp_program
|
||||
|
||||
.PHONY: check_python_pimpl
|
||||
check_python_pimpl: \
|
||||
test_python_sat_samples \
|
||||
test_python_linear_solver_samples \
|
||||
rpy_linear_programming \
|
||||
rpy_stigler_diet
|
||||
# rpy_constraint_programming_cp \
|
||||
# rpy_constraint_programming_sat \
|
||||
# rpy_rabbits_pheasants_cp \
|
||||
# rpy_rabbits_pheasants_sat \
|
||||
@@ -524,52 +541,23 @@ test_python_tests: \
|
||||
rpy_test_cp_api \
|
||||
rpy_test_lp_api
|
||||
|
||||
.PHONY: test_python_samples # Run all Python Samples (located in ortools/*/python)
|
||||
test_python_samples: \
|
||||
rpy_binpacking_problem \
|
||||
rpy_bool_or_sample \
|
||||
rpy_channeling_sample \
|
||||
rpy_code_sample \
|
||||
rpy_interval_sample \
|
||||
rpy_literal_sample \
|
||||
rpy_minimal_jobshop \
|
||||
rpy_no_overlap_sample \
|
||||
rpy_optional_interval_sample \
|
||||
rpy_rabbits_and_pheasants \
|
||||
rpy_ranking_sample \
|
||||
rpy_reified_sample \
|
||||
rpy_simple_lp_program \
|
||||
rpy_simple_solve \
|
||||
rpy_solve_all_solutions \
|
||||
rpy_solve_with_intermediate_solutions \
|
||||
rpy_solve_with_time_limit \
|
||||
rpy_stop_after_n_solutions
|
||||
|
||||
.PHONY: test_python_examples # Run all Python Examples (located in examples/python and examples/contrib)
|
||||
test_python_examples: \
|
||||
.PHONY: test_python_contrib # Run all Python Contrib (located in examples/python and examples/contrib)
|
||||
test_python_contrib: \
|
||||
rpy_3_jugs_mip \
|
||||
rpy_3_jugs_regular \
|
||||
rpy_alldifferent_except_0 \
|
||||
rpy_all_interval \
|
||||
rpy_alphametic \
|
||||
rpy_appointments \
|
||||
rpy_a_round_of_golf \
|
||||
rpy_assignment6_mip \
|
||||
rpy_assignment \
|
||||
rpy_assignment_sat \
|
||||
rpy_assignment_with_constraints \
|
||||
rpy_assignment_with_constraints_sat \
|
||||
rpy_bacp \
|
||||
rpy_balance_group_sat \
|
||||
rpy_blending \
|
||||
rpy_broken_weights \
|
||||
rpy_bus_schedule \
|
||||
rpy_car \
|
||||
rpy_check_dependencies \
|
||||
rpy_chemical_balance_lp \
|
||||
rpy_chemical_balance_sat \
|
||||
rpy_circuit \
|
||||
rpy_code_samples_sat \
|
||||
rpy_coins3 \
|
||||
rpy_coins_grid_mip \
|
||||
rpy_coloring_ip \
|
||||
@@ -577,14 +565,11 @@ test_python_examples: \
|
||||
rpy_contiguity_regular \
|
||||
rpy_costas_array \
|
||||
rpy_covering_opl \
|
||||
rpy_cp_is_fun_sat \
|
||||
rpy_crew \
|
||||
rpy_crossword2 \
|
||||
rpy_crypta \
|
||||
rpy_crypto \
|
||||
rpy_curious_set_of_integers \
|
||||
rpy_cvrp \
|
||||
rpy_cvrptw \
|
||||
rpy_debruijn_binary \
|
||||
rpy_diet1_b \
|
||||
rpy_diet1_mip \
|
||||
@@ -597,35 +582,22 @@ test_python_examples: \
|
||||
rpy_eq10 \
|
||||
rpy_eq20 \
|
||||
rpy_fill_a_pix \
|
||||
rpy_flexible_job_shop_sat \
|
||||
rpy_furniture_moving \
|
||||
rpy_futoshiki \
|
||||
rpy_game_theory_taha \
|
||||
rpy_gate_scheduling_sat \
|
||||
rpy_golomb8 \
|
||||
rpy_grocery \
|
||||
rpy_hidato_sat \
|
||||
rpy_hidato_table \
|
||||
rpy_integer_programming \
|
||||
rpy_jobshop_ft06_distance \
|
||||
rpy_jobshop_ft06 \
|
||||
rpy_jobshop_ft06_sat \
|
||||
rpy_just_forgotten \
|
||||
rpy_kakuro \
|
||||
rpy_kenken2 \
|
||||
rpy_killer_sudoku \
|
||||
rpy_knapsack_cp \
|
||||
rpy_knapsack_mip \
|
||||
rpy_knapsack \
|
||||
rpy_labeled_dice \
|
||||
rpy_langford \
|
||||
rpy_least_diff \
|
||||
rpy_least_square \
|
||||
rpy_lectures \
|
||||
rpy_linear_assignment_api \
|
||||
rpy_linear_programming \
|
||||
rpy_magic_sequence_sat \
|
||||
rpy_magic_sequence_distribute \
|
||||
rpy_magic_square_and_cards \
|
||||
rpy_magic_square_mip \
|
||||
rpy_magic_square \
|
||||
@@ -642,10 +614,8 @@ test_python_examples: \
|
||||
rpy_nqueens2 \
|
||||
rpy_nqueens3 \
|
||||
rpy_nqueens \
|
||||
rpy_nqueens_sat \
|
||||
rpy_nurse_rostering \
|
||||
rpy_nurses_cp \
|
||||
rpy_nurses_sat \
|
||||
rpy_olympic \
|
||||
rpy_organize_day \
|
||||
rpy_pandigital_numbers \
|
||||
@@ -654,11 +624,8 @@ test_python_examples: \
|
||||
rpy_p_median \
|
||||
rpy_post_office_problem2 \
|
||||
rpy_production \
|
||||
rpy_pyflow_example \
|
||||
rpy_pyls_api \
|
||||
rpy_quasigroup_completion \
|
||||
rpy_rabbit_pheasant \
|
||||
rpy_rcpsp_sat \
|
||||
rpy_regular \
|
||||
rpy_regular_table2 \
|
||||
rpy_regular_table \
|
||||
@@ -668,7 +635,6 @@ test_python_examples: \
|
||||
rpy_scheduling_speakers \
|
||||
rpy_secret_santa2 \
|
||||
rpy_send_more_money_any_base \
|
||||
rpy_sendmore \
|
||||
rpy_send_most_money \
|
||||
rpy_seseman_b \
|
||||
rpy_seseman \
|
||||
@@ -680,45 +646,87 @@ test_python_examples: \
|
||||
rpy_set_covering_skiena \
|
||||
rpy_set_partition \
|
||||
rpy_sicherman_dice \
|
||||
rpy_simple_meeting \
|
||||
rpy_single_machine_scheduling_with_setup_release_due_dates_sat \
|
||||
rpy_ski_assignment \
|
||||
rpy_slitherlink \
|
||||
rpy_stable_marriage \
|
||||
rpy_steel_lns \
|
||||
rpy_steel_mill_slab_sat \
|
||||
rpy_steel \
|
||||
rpy_stigler \
|
||||
rpy_strimko2 \
|
||||
rpy_subset_sum \
|
||||
rpy_sudoku \
|
||||
rpy_survo_puzzle \
|
||||
rpy_toNum \
|
||||
rpy_traffic_lights \
|
||||
rpy_transit_time \
|
||||
rpy_tsp \
|
||||
rpy_vendor_scheduling \
|
||||
rpy_volsay2 \
|
||||
rpy_volsay3 \
|
||||
rpy_volsay \
|
||||
rpy_vrpgs \
|
||||
rpy_vrp \
|
||||
rpy_wedding_optimal_chart \
|
||||
rpy_wedding_optimal_chart_sat \
|
||||
rpy_who_killed_agatha \
|
||||
rpy_worker_schedule_sat \
|
||||
rpy_xkcd \
|
||||
rpy_young_tableaux \
|
||||
rpy_zebra
|
||||
rpy_young_tableaux
|
||||
$(MAKE) run SOURCE=examples/contrib/coins_grid.py ARGS="5 2"
|
||||
$(MAKE) run SOURCE=examples/contrib/hidato.py ARGS="3 3"
|
||||
# $(MAKE) rpy_cvrptw_plot # error: py3 failure, missing numpy.
|
||||
# $(MAKE) rpy_nontransitive_dice # error: too long
|
||||
# warning: nurse_sat take 18s
|
||||
# $(MAKE) rpy_school_scheduling_sat # error: too long
|
||||
# $(MAKE) rpy_secret_santa # error: too long
|
||||
# $(MAKE) rpy_word_square # Not working on window since it rely on /usr/share/dict/words
|
||||
|
||||
.PHONY: test_python_python # Build and Run all Python Examples (located in ortools/examples/python)
|
||||
test_python_python: \
|
||||
rpy_appointments \
|
||||
rpy_assignment_sat \
|
||||
rpy_assignment_with_constraints \
|
||||
rpy_assignment_with_constraints_sat \
|
||||
rpy_balance_group_sat \
|
||||
rpy_chemical_balance_lp \
|
||||
rpy_chemical_balance_sat \
|
||||
rpy_code_samples_sat \
|
||||
rpy_constraint_programming_cp \
|
||||
rpy_cp_is_fun_sat \
|
||||
rpy_cvrp \
|
||||
rpy_cvrptw \
|
||||
rpy_flexible_job_shop_sat \
|
||||
rpy_gate_scheduling_sat \
|
||||
rpy_golomb8 \
|
||||
rpy_hidato_sat \
|
||||
rpy_hidato_table \
|
||||
rpy_integer_programming \
|
||||
rpy_jobshop_ft06_distance \
|
||||
rpy_jobshop_ft06 \
|
||||
rpy_jobshop_ft06_sat \
|
||||
rpy_knapsack \
|
||||
rpy_linear_assignment_api \
|
||||
rpy_linear_programming \
|
||||
rpy_magic_sequence_distribute \
|
||||
rpy_nqueens_sat \
|
||||
rpy_nurses_sat \
|
||||
rpy_pyflow_example \
|
||||
rpy_rabbit_pheasant \
|
||||
rpy_rcpsp_sat \
|
||||
rpy_sendmore \
|
||||
rpy_simple_meeting \
|
||||
rpy_single_machine_scheduling_with_setup_release_due_dates_sat \
|
||||
rpy_steel_mill_slab_sat \
|
||||
rpy_stigler_diet \
|
||||
rpy_sudoku \
|
||||
rpy_transit_time \
|
||||
rpy_tsp \
|
||||
rpy_vendor_scheduling \
|
||||
rpy_vrpgs \
|
||||
rpy_vrp \
|
||||
rpy_wedding_optimal_chart_sat \
|
||||
rpy_worker_schedule_sat \
|
||||
rpy_zebra
|
||||
# $(MAKE) rpy_cvrptw_plot # error: py3 failure, missing numpy.
|
||||
|
||||
.PHONY: test_python_pimpl
|
||||
test_python_pimpl: \
|
||||
check_python_pimpl \
|
||||
test_python_tests \
|
||||
test_python_contrib \
|
||||
test_python_python
|
||||
|
||||
################
|
||||
## Cleaning ##
|
||||
################
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2018 Google LLC
|
||||
// Copyright 2010-2018 Google LLC
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
@@ -11,23 +11,33 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Minimal example to call the GLOP solver.
|
||||
// [START program]
|
||||
using System;
|
||||
using Google.OrTools.LinearSolver;
|
||||
|
||||
public class SimpleProgram
|
||||
public class SimpleLpProgram
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
Solver solver = Solver.CreateSolver("SimpleProgram", "GLOP_LINEAR_PROGRAMMING");
|
||||
// Create the linear solver with the GLOP backend.
|
||||
Solver solver = Solver.CreateSolver("SimpleLpProgram", "GLOP_LINEAR_PROGRAMMING");
|
||||
|
||||
// Create the variables x and y.
|
||||
Variable x = solver.MakeNumVar(0.0, 1.0, "x");
|
||||
Variable y = solver.MakeNumVar(0.0, 2.0, "y");
|
||||
// Create the objective function, x + y.
|
||||
|
||||
// Create a linear constraint, 0 <= x + y <= 2.
|
||||
Constraint ct = solver.MakeConstraint(0.0, 2.0, "ct");
|
||||
ct.SetCoefficient(x, 1);
|
||||
ct.SetCoefficient(y, 1);
|
||||
|
||||
// Create the objective function, 3 * x + y.
|
||||
Objective objective = solver.Objective();
|
||||
objective.SetCoefficient(x, 1);
|
||||
objective.SetCoefficient(x, 3);
|
||||
objective.SetCoefficient(y, 1);
|
||||
objective.SetMaximization();
|
||||
|
||||
// Call the solver and display the results.
|
||||
solver.Solve();
|
||||
Console.WriteLine("Solution:");
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2018 Google LLC
|
||||
// Copyright 2010-2018 Google LLC
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
@@ -11,25 +11,36 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Minimal example to call the GLOP solver.
|
||||
// [START program]
|
||||
import com.google.ortools.linearsolver.MPConstraint;
|
||||
import com.google.ortools.linearsolver.MPObjective;
|
||||
import com.google.ortools.linearsolver.MPSolver;
|
||||
import com.google.ortools.linearsolver.MPVariable;
|
||||
|
||||
public class SimpleProgram {
|
||||
public class SimpleLpProgram {
|
||||
static { System.loadLibrary("jniortools"); }
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
MPSolver solver = new MPSolver("SimpleProgram",
|
||||
// Create the linear solver with the GLOP backend.
|
||||
MPSolver solver = new MPSolver("SimpleLpProgram",
|
||||
MPSolver.OptimizationProblemType.valueOf("GLOP_LINEAR_PROGRAMMING"));
|
||||
|
||||
// Create the variables x and y.
|
||||
MPVariable x = solver.makeNumVar(0.0, 1.0, "x");
|
||||
MPVariable y = solver.makeNumVar(0.0, 2.0, "y");
|
||||
// Create the objective function, x + y.
|
||||
|
||||
// Create a linear constraint, 0 <= x + y <= 2.
|
||||
MPConstraint ct = solver.makeConstraint(0.0, 2.0, "ct");
|
||||
ct.setCoefficient(x, 1);
|
||||
ct.setCoefficient(y, 1);
|
||||
|
||||
// Create the objective function, 3 * x + y.
|
||||
MPObjective objective = solver.objective();
|
||||
objective.setCoefficient(x, 3);
|
||||
objective.setCoefficient(y, 1);
|
||||
objective.setMaximization();
|
||||
|
||||
// Call the solver and display the results.
|
||||
solver.solve();
|
||||
System.out.println("Solution:");
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2018 Google LLC
|
||||
// Copyright 2010-2018 Google LLC
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
@@ -11,30 +11,41 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Minimal example to call the GLOP solver.
|
||||
// [START program]
|
||||
#include "ortools/linear_solver/linear_solver.h"
|
||||
#include "ortools/linear_solver/linear_solver.pb.h"
|
||||
#include <iostream>
|
||||
#include "ortools/linear_solver/linear_solver.h"
|
||||
|
||||
int main() {
|
||||
using namespace operations_research;
|
||||
using namespace std;
|
||||
namespace operations_research {
|
||||
void run() {
|
||||
// Create the linear solver with the GLOP backend.
|
||||
MPSolver solver("simple_lp_program", MPSolver::GLOP_LINEAR_PROGRAMMING);
|
||||
|
||||
MPSolver solver("SimpleProgram", MPSolver::GLOP_LINEAR_PROGRAMMING);
|
||||
// Create the variables x and y.
|
||||
MPVariable* const x = solver.MakeNumVar(0.0, 1, "x");
|
||||
MPVariable* const y = solver.MakeNumVar(0.0, 2, "y");
|
||||
// Create the objective function, x + y.
|
||||
|
||||
// Create a linear constraint, 0 <= x + y <= 2.
|
||||
MPConstraint* const ct = solver.MakeRowConstraint(0.0, 2.0, "ct");
|
||||
ct->SetCoefficient(x, 1);
|
||||
ct->SetCoefficient(y, 1);
|
||||
|
||||
// Create the objective function, 3 * x + y.
|
||||
MPObjective* const objective = solver.MutableObjective();
|
||||
objective->SetCoefficient(x, 1);
|
||||
objective->SetCoefficient(x, 3);
|
||||
objective->SetCoefficient(y, 1);
|
||||
objective->SetMaximization();
|
||||
|
||||
// Call the solver and display the results.
|
||||
solver.Solve();
|
||||
cout << "Solution:" << endl;
|
||||
cout << "x = " << x->solution_value() << endl;
|
||||
cout << "y = " << y->solution_value() << endl;
|
||||
std::cout << "Solution:" << std::endl;
|
||||
std::cout << "x = " << x->solution_value() << std::endl;
|
||||
std::cout << "y = " << y->solution_value() << std::endl;
|
||||
}
|
||||
} // namespace operations_research
|
||||
|
||||
int main() {
|
||||
operations_research::run();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
// [END program]
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2010-2017 Google
|
||||
# Copyright 2010-2018 Google LLC
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
@@ -20,18 +20,20 @@ from ortools.linear_solver import pywraplp
|
||||
|
||||
def main():
|
||||
# Create the linear solver with the GLOP backend.
|
||||
solver = pywraplp.Solver('simple_lp_program',
|
||||
pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
|
||||
solver = pywraplp.Solver(
|
||||
'simple_lp_program',
|
||||
pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
|
||||
|
||||
# Create the variables x and y.
|
||||
x = solver.NumVar(0, 1, 'x')
|
||||
y = solver.NumVar(0, 2, 'y')
|
||||
|
||||
# Create a linear constraint.
|
||||
# Create a linear constraint, 0 <= x + y <= 2.
|
||||
ct = solver.Constraint(0, 2, 'ct')
|
||||
ct.SetCoefficient(x, 1)
|
||||
ct.SetCoefficient(y, 1)
|
||||
|
||||
# Create the objective function, x + y.
|
||||
# Create the objective function, 3 * x + y.
|
||||
objective = solver.Objective()
|
||||
objective.SetCoefficient(x, 3)
|
||||
objective.SetCoefficient(y, 1)
|
||||
|
||||
Reference in New Issue
Block a user