{"id":15686991,"url":"https://github.com/cicirello/interactivebinpacking","last_synced_at":"2025-05-07T14:44:47.560Z","repository":{"id":38289069,"uuid":"276695252","full_name":"cicirello/InteractiveBinPacking","owner":"cicirello","description":"Self-guided tutorial on combinatorial optimization, the bin packing problem, and constructive heuristics, suitable for use as course assignments, or by self-directed learners.","archived":false,"fork":false,"pushed_at":"2025-04-21T23:36:22.000Z","size":1453,"stargazers_count":10,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-22T00:27:48.812Z","etag":null,"topics":["bin-packing","combinatorial-optimization","constructive-heuristics","courseware","discrete-optimization","java","self-directed-learning","self-guided-tutorial","tutorial"],"latest_commit_sha":null,"homepage":"https://www.cicirello.org/publications/cicirello2022jose.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cicirello.png","metadata":{"funding":{"github":"cicirello","patreon":null,"open_collective":null,"ko_fi":"cicirello","tidelift":null,"community_bridge":null,"liberapay":"cicirello","issuehunt":null,"otechie":null,"custom":null},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":".zenodo.json"}},"created_at":"2020-07-02T16:27:17.000Z","updated_at":"2025-04-21T23:35:46.000Z","dependencies_parsed_at":"2023-02-09T13:01:22.515Z","dependency_job_id":"6b844aad-c22d-4e4d-a069-ca9c615dc80e","html_url":"https://github.com/cicirello/InteractiveBinPacking","commit_stats":{"total_commits":374,"total_committers":2,"mean_commits":187.0,"dds":0.339572192513369,"last_synced_commit":"2b9b42ac961b5eac9e611582ef1219bcc439396d"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cicirello%2FInteractiveBinPacking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cicirello%2FInteractiveBinPacking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cicirello%2FInteractiveBinPacking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cicirello%2FInteractiveBinPacking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cicirello","download_url":"https://codeload.github.com/cicirello/InteractiveBinPacking/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252898009,"owners_count":21821542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bin-packing","combinatorial-optimization","constructive-heuristics","courseware","discrete-optimization","java","self-directed-learning","self-guided-tutorial","tutorial"],"created_at":"2024-10-03T17:42:22.993Z","updated_at":"2025-05-07T14:44:47.531Z","avatar_url":"https://github.com/cicirello.png","language":"Java","readme":"# Interactive Bin Packing\n\n[\u003cimg alt=\"Interactive Bin Packing\" \n     src=\"images/ibp.png\" width=\"640\"\u003e](#interactive-bin-packing)\n\nCopyright (C) 2008, 2010, 2020-2023 [Vincent A. Cicirello](https://www.cicirello.org/).\n\n| __Publications About the Application__ | [![DOI](https://jose.theoj.org/papers/10.21105/jose.00140/status.svg)](https://doi.org/10.21105/jose.00140) |\n| :--- | :--- |\n| __Packages and Releases__ | [![Maven Central](https://img.shields.io/maven-central/v/org.cicirello/interactive-bin-packing.svg?label=Maven%20Central\u0026logo=apachemaven)](https://central.sonatype.com/artifact/org.cicirello/interactive-bin-packing/) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/cicirello/InteractiveBinPacking?logo=GitHub)](https://github.com/cicirello/InteractiveBinPacking/releases) |\n| __Build Status__ | [![build](https://github.com/cicirello/InteractiveBinPacking/workflows/build/badge.svg)](https://github.com/cicirello/InteractiveBinPacking/actions/workflows/build.yml) [![CodeQL](https://github.com/cicirello/InteractiveBinPacking/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/cicirello/InteractiveBinPacking/actions/workflows/codeql-analysis.yml) |\n| __JaCoCo Test Coverage__ | [![coverage](../badges/jacoco.svg)](https://github.com/cicirello/InteractiveBinPacking/actions/workflows/build.yml) [![branches](../badges/branches.svg)](https://github.com/cicirello/InteractiveBinPacking/actions/workflows/build.yml) |\n| __Security__ | [![Snyk security score](https://snyk-widget.herokuapp.com/badge/mvn/org.cicirello/interactive-bin-packing/badge.svg)](https://snyk.io/vuln/maven%3Aorg.cicirello%3Ainteractive-bin-packing) [![Snyk Known Vulnerabilities](https://snyk.io/test/github/cicirello/InteractiveBinPacking/badge.svg)](https://snyk.io/test/github/cicirello/InteractiveBinPacking) |\n| __DOI__ | [![DOI](https://zenodo.org/badge/276695252.svg)](https://zenodo.org/badge/latestdoi/276695252) |\n| __Other Information__ | [![License](https://img.shields.io/github/license/cicirello/InteractiveBinPacking)](https://github.com/cicirello/InteractiveBinPacking/blob/master/LICENSE) [![style](https://img.shields.io/badge/style-Google%20Java%20Style-informational)](https://google.github.io/styleguide/javaguide.html) |\n\n## How to Cite\n\nIf you have reason to cite this application in an article, please cite the following:\n\n\u003e Cicirello, V.A., (2022). Interactive Bin Packing: A Java Application for Learning Constructive Heuristics for Combinatorial Optimization. *Journal of Open Source Education*, 5(49), 140, https://doi.org/10.21105/jose.00140.\n\n## Overview\n\nInteractive Bin Packing provides a self-guided \ntutorial on combinatorial optimization, the bin packing problem, \nand constructive heuristics for bin packing. It also enables the \nuser to interact with bin packing instances to explore their own \nproblem solving strategies, or to test their knowledge of the \nvarious constructive heuristics covered by the tutorial. The \napplication is not a solver for bin packing. Interactive \nBin Packing is a tool for learning about the bin \npacking problem, as well as for learning about heuristic \ntechniques for solving instances of the problem. \n\nThe objectives of Interactive Bin Packing include:\n\n* gaining an understanding of the bin packing problem, \n  and more generally how the bin packing problem is an \n  example of a combinatorial optimization problem;\n* learning about constructive heuristics;\n* learning about the most common constructive heuristics \n  for the bin packing problem, including first-fit, best-fit, \n  first-fit decreasing, and best-fit decreasing; and\n* serving as an interactive environment for students (whether \n  in the formal context of a class, or just for informal \n  self-guided learning) to explore potential problem solving \n  methods for combinatorial optimization.\n\nIn addition to the Interactive Bin Packing application source code,\nthis repository also contains example assignments.  Specifically,\nthe [assignments](assignments) directory\ncontains example assignments that can either be used by\nself-guided learners, or which can be adapted and used by\ninstructors in courses, such as within courses on discrete \nmathematics, algorithms, or artificial intelligence.\n\nFirst time users should start by taking a look at the\nsections below on [User Documentation](#user-documentation)\nas well as [Installing and Running the \nApplication](#installing-and-running-the-application). \nWe also recommend that first time users (whether students in courses\nor self-learners) work through the \n[first of the example assignments](assignments/1).\n\n\n## Java 11+\n\nThe prebuilt jar of the application is built with the OpenJDK 11.\n\n## Example Assignments\n\nIn addition to the Interactive Bin Packing application, the\nrepository contains a directory of [Example Assignments](assignments)\nthat utilize the application. Self-directed learners may begin with\n[assignments/1](assignments/1); while course instructors may prefer\nto assign their students [assignments/2](assignments/2), which utilizes\nthe Session Log functionality introduced in [version 3.1.0](CHANGELOG.md) \nto make it easy for instructors to validate students' work. \n\n## User Documentation\n\nAll user documentation is contained within the application itself, \nwhich you can access via two\ncommands in the Info menu:\n\n* The Tutorial command in the Info menu opens a self-guided tutorial \n  on combinatorial optimization, the bin packing problem, and \n  constructive heuristics for bin packing. It will also walk you through \n  using the application, and all of its functionality. \n* The Help command (also in the Info menu) provides documentation of all \n  menu functions and other user interface elements.\n* We recommend that instructors take a look at the documentation of the\n  commands of the Session menu (see the Help command), which enables having\n  students save session logs, and also provides functionality for validating\n  the session logs they submit to you to confirm successful completion of\n  assignments that utilize the application.\n\nThe first time that you use the application, we recommend that you \nbegin by choosing the Tutorial command from the Info menu, and working \nyour way through the self-guided tutorial.  \n\n\n## Installing and Running the Application\n\n### Installing == Downloading\n\nThe Interactive Bin Packing application is available as a prebuilt, executable\njar file from a variety of sources. The filename of the jar is of the form\n`interactive-bin-packing-X.Y.Z.jar`, where X.Y.Z is the version number.\n\nTo install, simply download the `jar` of the latest release by doing any of the\nfollowing:\n* From the command line via \n  [Maven Central](https://central.sonatype.com/artifact/org.cicirello/interactive-bin-packing/):  \n  ```Shell\n  curl -O -J -L  \"https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy\u0026g=org.cicirello\u0026a=interactive-bin-packing\u0026e=jar\u0026v=LATEST\"\n  ```\n* From \n  [Maven Central](https://central.sonatype.com/artifact/org.cicirello/interactive-bin-packing/) \n  repository website: Select versions tab, and then the browse link, and download the jar.\n* From the \n  [GitHub Package Registry](https://github.com/users/cicirello/packages?repo_name=InteractiveBinPacking): \n  Select the most recent release, and download the jar of the application. \n* From [GitHub releases](https://github.com/cicirello/InteractiveBinPacking/releases): \n  Simply download the jar from the most recent release.\n* Building from the source: See the section on this below.\n\n### Running\n\nThe jar file that you downloaded above is an executable jar. To run, assuming \nthat you have a Java runtime environment (JRE version 11 or higher)\ninstalled on your system, then do any of the following:\n* Simply double click the jar file.\n* From the command line (assuming your current directory is that of the \n  jar file), you can run with: `interactive-bin-packing-X.Y.Z.jar`.\n  Just replace the X.Y.Z with the version number that you downloaded.\n* Or from the command line, you can similarly run \n  with: `java -jar interactive-bin-packing-X.Y.Z.jar`. \n\n## Building and Testing the Application (with Maven)\n\nThe Interactive Bin Packing Application is built using Maven, which you\ncan download and install from the \nofficial [Apache Maven website](https://maven.apache.org/). \n\nThe root of the repository contains a Maven `pom.xml`.  To build the library, \nexecute `mvn package` at the root of the repository, which\nwill compile all classes, run all tests, and generate jar files of the \napplication, the sources, and the javadocs.  The file names\nmake this distinction explicit.  All build artifacts will then\nbe found in the directory `target`.\n\nTo include generation of a code coverage report during the build,\nexecute `mvn package -Pcoverage` at the root of the repository to \nenable a Maven profile that executes JaCoCo during the test phase.\n\nTo run all static analysis tools (i.e., SpotBugs, Find Security Bugs, \nrefactor-first), execute `mvn package -Panalysis` to enable a Maven \nprofile that executes the various static analysis tools that we are \nusing. The SpotBugs html report will be found in the `target` directory, \nor you can use the SpotBugs GUI with: `mvn spotbugs:gui -Panalysis`. The \nrefactor-first report will be found in the `target/site` directory.\n\nTo run all of the above: `mvn package -P \"analysis,coverage\"`.\n\nThe jar file of the application is executable, so you then simply\ndouble click it to run.\n\n\n## License\n\nThe Interactive Bin Packing Application is licensed under \nthe [GNU General Public License 3.0](https://www.gnu.org/licenses/gpl-3.0.en.html).\n\n## Contribute\n\nReport bugs, suggestions, feature requests, etc via \nthe [issues tracker](https://github.com/cicirello/InteractiveBinPacking/issues).\nIf you would like to contribute to Interactive Bin Packing in any way, such \nas reporting bugs, suggesting new functionality, or code contributions \nsuch as bug fixes or implementations of new functionality, then start \nby reading \nthe [contribution guidelines](https://github.com/cicirello/.github/blob/main/CONTRIBUTING.md).\nThis project has adopted \nthe [Contributor Covenant Code of Conduct](https://github.com/cicirello/.github/blob/main/CODE_OF_CONDUCT.md).\n\n## Support and Discussion\n\nTo obtain support from the maintainers or from other community members, or to discuss ideas \nfor potential new functionality, we are \nusing [GitHub Discussions](https://github.com/cicirello/InteractiveBinPacking/discussions). For\nsupport, start a new discussion with the `Q\u0026A` category. If you would like to discuss ideas for\nnew functionality before submitting an issue, you can start a discussion with the `Ideas` category.\nYou can use the `General` category for any other community discussions.\n\n\n","funding_links":["https://github.com/sponsors/cicirello","https://ko-fi.com/cicirello","https://liberapay.com/cicirello"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcicirello%2Finteractivebinpacking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcicirello%2Finteractivebinpacking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcicirello%2Finteractivebinpacking/lists"}