Giter VIP home page Giter VIP logo

satellite-placement's Introduction

Open in GitHub Codespaces Linux/Mac/Windows build status

Satellite Placement

Suppose you have a set of N satellites and k targets on Earth that you want to observe. Each of your satellites has varying capabilities for Earth observation; in particular, the amount of ground that they can observe for a set amount of time is different. Since there are k targets, you would like to have k constellations to monitor said targets. How do you group your satellites into k constellations such that the coverage of each constellation is maximized? This is the question that we will be addressing in this demo!

There are two versions available. The first version has N=12 and k=4. The larger version has N=39 and k=13.

Note: in this demo we are assuming that N is a multiple of k.

Usage

To run the smaller demo, using D-Wave's Simulated Annealing package (Neal), run the command:

python satellite.py small.json neal

To run the larger demo, using D-Wave's Hybrid Solver Service (HSS), run the command:

python satellite.py large.json hss

It will print out a set of satellite constellations and create an image to visualize the scores for each constellation, as shown below. Satellites closer to the center (grey star) have a higher score.

Example Output

Note: the larger demo is memory-intensive. It may use more than 10 GB of RAM.

Code Overview

The idea is to consider all possible combinations of satellites, eliminate constellations with particularly low coverage, and encourage the following type of solutions:

  • Constellations that have better coverage
  • Satellites to only join one constellation
  • A specific number of constellations in our final solution (i.e. encourage the solution to have k constellations)

Code Specifics

We add weights to each constellation such that we are favoring constellations with a high coverage (aka high score). This is done with bqm.add_variable(frozenset(constellation), -score). Note that frozenset is used to convey the concept that each variable in the model is a set of individual satellites, and the ordering does not matter. Incidentally, the code that defines the variables iterates over only the combinations (not the permutations), so defining the variables as tuples would work just as well (however, set cannot be used because the variables must be immutable).

References

G. Bass, C. Tomlin, V. Kumar, P. Rihaczek, J. Dulny III. Heterogeneous Quantum Computing for Satellite Constellation Optimization: Solving the Weighted K-Clique Problem. 2018 Quantum Sci. Technol. 3 024010. https://arxiv.org/abs/1709.05381

License

Released under the Apache License 2.0. See LICENSE file.

satellite-placement's People

Contributors

arcondello avatar hemantdwave avatar henrydykhne avatar joelgdwave avatar joelpasvolsky avatar m3ller avatar randomir avatar vgoliber avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

satellite-placement's Issues

Confusion about scoring

I'm new to some of these problems, and I think I might be missing something, but the way the score is calculated for coverage (by averaging the coverage of the satellites in each constellation) means that the sum of any 4 constellations that don't share satellites will be the same. Any solution ends up having the same score as any other provided satellites are not being shared. Is the algorithm not adding up the scores of each constellation? Or should the score for each constellation instead be calculated as:
1-product((1-satelite_coverage) for all satellites)?
implemented like this:

score = 1
for v in constellation:
    score *= (1-data['coverage'][str(v)])
score = 1-score

Under the current model of just taking the average, one could make a constellation worse by adding a satellite if it is bad enough. Is this intended? Am I missing something? Or is the calculation wrong in this example?

Confusion about scoring.

I'm new to some of these problems, and I think I might be missing something, but the way the score is calculated for coverage (by averaging the coverage of the satellites in each constellation) means that the sum of any 4 constellations that don't share satellites will be the same. Any solution ends up having the same score as any other provided satellites are not being shared. Is the algorithm not adding up the scores of each constellation? Or should the score for each constellation instead be calculated as:
1-product((1-satelite_coverage) for all satelites)?
implemented like this:
score = 1
for v in constellation:
score *= (1-data['coverage'][str(v)])
score = 1-score
Under the current model of just taking the average, one could make a constellation worse by adding a satellite if it is bad enough. Is this intended? Am I missing something? Or is the calculation wrong in this example?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.